Руководство по обновлению
Suggest edit- Обновление до 12.0 с 11.x
- Обновление зависимостей
- Laravel 9.x
- Обновление до 11.0 с 10.x
- Обновление зависимостей
- Publish assets files
- Иконки
- Экран
- Компонент
- Метрики
- Обновление до 10.0 с 9.x
- Обновление зависимостей
- Меню
- CanSee
- Stimulus
- Turbo
- Compendium
- Collapse
- Обновление до 9.0 с 8.x
- Обновление зависимостей
- Auth
- Обновление до 8.0 с 7.x
- Обновление зависимостей
- Редактор TinyMCE
- Модель настроек
- Хлебные крошки
- Изменения экрана
- Конструктор
- Методы маршрута
- Подмена данных (Async)
- Изменения слоёв
- Сообщение о релизе
- Иконки
Нам нравится делать вещи как можно более современными и придерживаться подхода «release early, release often»(«выпускайте раньше, выпускайте чаще») к основным выпускам. Это означает, что мы не будем ждать произвольное количество месяцев, чтобы накопить большие изменения и выпустить следующую основную версию. Благодаря частому выпуску основных версий новые функции будут доступны раньше, а обновление на свежую версию будет намного проще.
Мы пытаемся задокументировать все возможные критические изменения. Некоторые из этих изменений относятся к внутренним обращениям, поэтому только часть этих изменений может фактически повлиять на ваше приложение.
Обновление до 12.0 с 11.x
Обновление зависимостей
В вашем файле composer.json
обновите зависимость orchid/platform
до ^12.0
Laravel 9.x
Теперь для установки или обновления требуется Laravel 9. Описания обновлений для существующих проектов можно найти в документации.
Обновление до 11.0 с 10.x
Обновление зависимостей
В вашем файле composer.json
обновите зависимость orchid/platform
до ^11.0
Publish assets files
Вместо создания символической ссылки для загрузки ресурсов появилась новая команда для их публикации:
php artisan orchid:publish
Это поместит JS/CSS
в директорию public/vendor/orchid
. Также потребуется автоматизировать внесение изменений в composer.json:
{
"scripts": {
"post-update-cmd": [
"@php artisan orchid:publish --ansi"
]
}
}
Иконки
Значки теперь могут быть полностью заменены и не загружаются принудительно. Чтобы продолжить их использование, измените файл конфигурации:
'icons' => [
'orc' => \Orchid\IconPack\Path::getFolder(),
],
Экран
Публичные свойства экрана теперь автоматически заполняются значениями по ключу из метода query()
. Например:
class IdeaScreen extends Screen
{
public $name = 'Edit User';
public function query(): array
{
return [
'name' => 'Welcome',
];
}
}
Значение свойства name
будет перезаписано.
Чтобы этого избежать, измените видимость свойства на protected
class IdeaScreen extends Screen
{
protected $name = 'Edit User';
public function query(): array
{
return [
'name' => 'Welcome',
];
}
}
Компонент
Указание ожидаемого имени аргумента для компонентов больше не требуется:
// Раньше
TD::make('index')->component(OrderShortInformation::class, 'order', [
'limit' => 100
]);
// Сейчас
TD::make('index')->component(OrderShortInformation::class, [
'limit' => 100
]);
Метрики
Вместо отдельного класса теперь используется короткий синтаксис::
use Orchid\Support\Facades\Layout;
public function query(): array
{
return [
'metrics' => [
'sales' => ['value' => number_format(6851), 'diff' => 10.08],
'total' => number_format(65661),
],
];
}
public function layout(): iterable
{
return [
Layout::metrics([
'Sales Today' => 'metrics.sales',
'Total Earnings' => 'metrics.total',
]),
];
}
Обновление до 10.0 с 9.x
Обновление зависимостей
В вашем файле composer.json
обновите зависимость orchid/platform
до ^10.0
Меню
Разделы меню были сокращены, “системное меню” было удалено. Константы теперь в классе Orchid\Platform\Dashboard
.
use Orchid\Platform\Dashboard;
Dashboard::MENU_MAIN;
Dashboard::MENU_PROFILE;
Меню теперь являются классами Field
и имеют унифицированный синтаксис. До:
ItemMenu::label('Example screen')
->icon('monitor')
->route('platform.example')
->title('Navigation')
->badge(function () {
return 6;
});
После:
use Orchid\Screen\Actions\Menu;
Menu::make('Example screen')
->icon('monitor')
->route('platform.example')
->title('Navigation')
->badge(function () {
return 6;
});
Как видите, обновление должно быть очень мягким. Но отличия также будут, например, написание вложенных элементов будет более наглядным:
До:
ItemMenu::label('Dropdown menu')
->slug('example-menu')
->icon('code')
->withChildren(),
ItemMenu::label('Sub element item 1')
->place('example-menu')
->icon('bag'),
ItemMenu::label('Sub element item 2')
->place('example-menu')
->icon('heart'),
После:
Menu::make('Dropdown menu')
->icon('code')
->list([
Menu::make('Sub element item 1')->icon('bag'),
Menu::make('Sub element item 2')->icon('heart'),
]),
Значение по умолчанию для сортировки изменено с 1000 на 0:
Menu::make('Example screen')
->icon('monitor')
->route('platform.example')
->title('Navigation')
->sort(2),
Это также верно для вложенных элементов:
Menu::make('Dropdown menu')
->icon('code')
->list([
Menu::make('Sub element item 1')->icon('bag')->sort(2),
Menu::make('Sub element item 2')->icon('heart')->sort(0),
]),
Для динамического определения вам нужно вызвать метод slug
, в котором передается уникальная строка:
Menu::make('Dropdown menu')
->slug('sub-menu')
->icon('code')
->list([
Menu::make('Sub element item 1')->icon('bag'),
Menu::make('Sub element item 2')->icon('heart'),
]),
Что бы добавить новые элементы динамически:
Dashboard::addMenuSubElements(Dashboard::MENU_MAIN, 'sub-menu', [
Menu::make('Sub element item 3')->icon('badge')
]);
Внимание. Нужно соблюдать порядок загрузки.
CanSee
Теперь у Fields/Layouts/TD
есть общий trait. Теперь вы можете это сделать:
Input::make()->canSee(false);
TD::make()->canSee(false);
Layout::rows([])->canSee(false);
Но теперь определение внутри слоя другое:
// before
public function canSee(Repository $query): bool
{
return ...;
}
// after
public function isSee(): bool
{
return ...;
}
Stimulus
Фреймворк Stimulus обновлен до версии 2.0. Обратная совместимость сохранена, но в именах контроллеров избавлены от префиксов:
<!-- before: -->
<div data-controller="fields--checkbox">
<!-- after: -->
<div data-controller="checkbox">
Turbo
Библиотека Turbolinks была обновлена до Turbo, подробнее здесь: https://turbo.hotwire.dev/
Если вы использовали собственные js-скрипты, то рекомендуется ознакомиться с их изменениями. Например:
// before
document.addEventListener("turbolinks:load", function() {
// ...
})
// after
document.addEventListener("turbo:load", function() {
// ...
})
Compendium
Класс Compendium
был удален. Рекомендую использовать более новую версию Legend
.
Collapse
Класс Collapse
был удален.
Обновление до 9.0 с 8.x
Обновление зависимостей
В вашем файле composer.json
обновите зависимость orchid/platform
до ^9.0
Auth
Команда Laravel представила новые продукты Jetstream и Fortify, которые пришли на смену более раннему laravel/ui. Чтобы обеспечивать совместимость с различными вариантами, зависимость от laravel/ui
была удалена. А вместе с ней возможность восстановления пароля.
Новые продукты предоставляют двухфакторную аутентификацию пользователя, а также просмотр последних активных сессий. Чтобы не конкурировать с ними, такие же возможности были удалены из пакета.
Хотя миграции были удалены, данные, хранящиеся в базе данных, не будут удалены автоматически.
Для их удаления необходимо выполнить следующий SQL
код:
ALTER TABLE "users"
DROP COLUMN "last_login"
DROP COLUMN "uses_two_factor_auth"
DROP COLUMN "two_factor_secret_code"
DROP COLUMN "two_factor_recovery_code";
DELETE FROM migrations
WHERE migration = '2020_06_07_184338_added_columns_for_2fa';
После этого необходимо удалить данные колонки из вашей модели пользователя.
Если вы копировали миграцию 2020_06_07_184338_added_columns_for_2fa
к себе в проект, не забудьте ее тоже удалить.
Обновление до 8.0 с 7.x
Обновление зависимостей
В вашем файле composer.json
обновите зависимость orchid/platform
до ^8.0
Редактор TinyMCE
Html
редактор был удалён из стандартной поставки. Код был перенесён в отдельный репозиторий.
Модель настроек
Модель настроек так же была удалена. Данные, хранящиеся в базе данных, не будут удалены автоматически.
Для их удаления необходимо выполнить следующий SQL
код:
DROP TABLE settings;
DELETE FROM migrations
WHERE migration = '2015_12_02_181214_create_table_settings';
Если вы копировали миграцию 2015_12_02_181214_create_table_settings
к себе в проект, не забудьте ее тоже удалить.
Исходный код доступен для установки в качестве отдельного пакета.
Хлебные крошки
Пакет davejamesmiller/laravel-breadcrumbs
заменён на tabuna/breadcrumbs
и должен быть установлен автоматически при обновлении зависимостей.
Примечание. Может потребоваться удаление загрузочных файлов кэша в директории
bootstrap/cache
.
Синтаксис нового пакета позволяет показывать хлебные крошки прямо в определении маршрута:
Route::screen('example', ExampleScreen::class)
->name('platform.example')
->breadcrumbs(function (Trail $trail) {
return $trail->parent('platform.index')->push(__('Example screen'));
});
Так же, вы можете продолжить использовать отдельный файл для них. Для этого, необходимо загрузить его в сервис провайдере:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application events.
*
* @return void
*/
public function boot()
{
require base_path('routes/breadcrumbs.php');
}
}
Если вы использовали полные имена классов, то необходимо произвести замену на аналогичные:
use Tabuna\Breadcrumbs\Breadcrumbs;
use Tabuna\Breadcrumbs\Trail;
Изменения экрана
Конструктор
В передаче объекта Request
и вызова родительского класса больше нет необходимости. До:
class PublicationScreen extends Screen
{
public function __construct(Request $request, Locator $locator)
{
$this->request = $request;
$this->locator = $locator;
}
}
Определение теперь выглядит так:
class PublicationScreen extends Screen
{
public function __construct(Locator $locator)
{
$this->locator = $locator;
}
}
Методы маршрута
Не использованные методы были удалены. Больше нельзя обратиться к экранам через методы PUT|PATCH|DELETE
, обращение должно использовать GET|POSTS
для получения/отправки данных.
Method | URI | Name
-----------------+--------------------------------------+--------------
GET|HEAD|POST | dashboard/idea/{method?} | platform.idea
Теперь методы экрана, ожидающие модели, при их отсутствии будут реализовывать пустую модель так же, как и контроллеры. Подробнее.
Подмена данных (Async)
Ожидание {argument?}
было удалено из адресной строки.
Теперь для обращения используется отдельный маршрут:
$this->router
->post('async/{screen}/{method?}/{template?}', [AsyncController::class, 'load'])
->name('async');
Изменения слоёв
Каждый слой теперь наследуется от класса Orchid\Screen\Layout
, а не от Orchid\Screen\Layouts\Base
.
Для объявления слоёв через короткий синтаксис теперь должен использоваться фасад Orchid\Support\Facades\Layout
вместо класса Orchid\Screen\Layout
.
Было:
use Orchid\Screen\Layout;
Layout::row([
// ...
]);
Стало:
use Orchid\Support\Facades\Layout;
Layout::row([
// ...
]);
Сообщение о релизе
Системное сообщение проинформировало пользователей о выпуске новой версии пакета. Но у них нет возможности обновиться без помощи разработчика.
Это раздражало больше, чем поддерживало программное обеспечение в актуальном состоянии. По этому он был удалён, если вы использовали его (По умолчанию только на первом экране), то следует удалить его вызов так же как и blade
шаблон. Пример вызова в экране:
return [
'status' => Dashboard::checkUpdate(),
];
Использование шаблона в экране:
Layout::view('platform::partials.update');
Иконки
Отображение иконок было переработано с font
на SVG
формат.
Теперь методы ->icon
принимают не значение css
которое необходимо установить, а название файла.
В большинстве случаев необходимо только убрать префикс icon-
.