- Автоматический апгрейд
- Обновление пакета
- Изменения пространств имен
- Изменения в структуре ресурсов
- Изменения в полях
- Изменения в Layout
- Устаревшие классы и методы
- Асинхронные методы
Автоматический апгрейд
Для упрощения процесса миграции вы можете воспользоваться пакетом warete/moonshine-upgrade, который автоматически выполнит все необходимые изменения для перехода на MoonShine 4.0.
Обновление пакета
Измените версию пакета в composer.json и обновите зависимости.
{"require": {"moonshine/moonshine": "^4.0"}}{"require": {"moonshine/moonshine": "^4.0"}}
composer updatecomposer update
Изменения пространств имен
-use MoonShine\Laravel\Forms\FiltersForm;+use MoonShine\Crud\Forms\FiltersForm;-use MoonShine\Laravel\Forms\LoginForm;+use MoonShine\Crud\Forms\LoginForm;-use MoonShine\Laravel\Http\Responses\MoonShineJsonResponse;+use MoonShine\Crud\JsonResponse;-use MoonShine\Laravel\MoonShineRequest;+use MoonShine\Contracts\Core\DependencyInjection\CrudRequestContract;-use MoonShine\Laravel\Enums\Action;+use MoonShine\Support\Enums\Action;-use MoonShine\Laravel\Enums\Ability;+use MoonShine\Support\Enums\Ability;-use MoonShine\Laravel\Traits\WithComponentsPusher;+use MoonShine\Crud\Traits\WithComponentsPusher;-use MoonShine\Laravel\Forms\FiltersForm;+use MoonShine\Crud\Forms\FiltersForm;-use MoonShine\Laravel\Forms\LoginForm;+use MoonShine\Crud\Forms\LoginForm;-use MoonShine\Laravel\Http\Responses\MoonShineJsonResponse;+use MoonShine\Crud\JsonResponse;-use MoonShine\Laravel\MoonShineRequest;+use MoonShine\Contracts\Core\DependencyInjection\CrudRequestContract;-use MoonShine\Laravel\Enums\Action;+use MoonShine\Support\Enums\Action;-use MoonShine\Laravel\Enums\Ability;+use MoonShine\Support\Enums\Ability;-use MoonShine\Laravel\Traits\WithComponentsPusher;+use MoonShine\Crud\Traits\WithComponentsPusher;
Изменения в структуре ресурсов
Многие методы и свойства перенесены из ресурсов в соответствующие CRUD-страницы.
Методы rules(), modifyFormComponent() перенесены в класс формы.
Методы metrics(), queryTags(), filters(), modifyListComponent() перенесены в класс индексной страницы.
Метод modifyDetailComponent() перенесён в класс детальной страницы.
Метод indexButtons() удален из ресурса, вместо него следует использовать метод buttons() в классе индексной страницы.
Метод topButtons() удален из ресурса, вместо него следует использовать методы topLeftButtons() и topRightButtons() в классе индексной страницы.
Метод formButtons() удален из ресурса, вместо него следует использовать метод buttons() в классе страницы формы.
Метод formBuilderButtons() удален из ресурса, вместо него следует использовать метод formButtons() в классе страницы формы.
Свойства $clickAction, $stickyTable, $stickyButtons, $columnSelection удалены из ресурса.
Вместо них следует переопределять метод modifyListComponent() в классе индексной страницы.
Это не полный список изменений в ресурсе, но процесс переноса всего соответствующего функционала из ресурса в CRUD-страницы довольно интуитивный и не должен составить труда.
Изменения в полях
Удалено поле StackFields, вместо него следует использовать поле Fieldset.
-StackFields::make('Title', [- Text::make('Field 1'),- Text::make('Field 2'),-])+Fieldset::make('Title', [+ Text::make('Field 1'),+ Text::make('Field 2'),+])-StackFields::make('Title', [- Text::make('Field 1'),- Text::make('Field 2'),-])+Fieldset::make('Title', [+ Text::make('Field 1'),+ Text::make('Field 2'),+])
Изменения в Layout
Удален CompactLayout
Шаблон CompactLayout был удален. Если вы использовали этот шаблон, перейдите на расширение стандартного AppLayout.
-use MoonShine\Laravel\Layouts\CompactLayout;+use MoonShine\Laravel\Layouts\AppLayout;-use MoonShine\Laravel\Layouts\CompactLayout;+use MoonShine\Laravel\Layouts\AppLayout;
Новые палитры
Введена система палитр для управления цветовой схемой. По умолчанию используется PurplePalette.
Подробнее о работе с палитрами смотрите в разделе Color Manager.
Изменения в MenuItem
Параметры в методе MenuItem::make() поменялись местами, теперь первым идет $filler, затем $label.
Параметр $label стал необязательным, по умолчанию он берется из метода getLabel() наполнителя.
-MenuItem::make('Settings', SettingResource::class)+MenuItem::make(SettingResource::class)-MenuItem::make('Settings', SettingResource::class)+MenuItem::make(SettingResource::class)
Изменения в компонентах
В компоненте Profile удален входной параметр $withBorder.
Устаревшие классы и методы
Следующие классы и методы объявлены устаревшими и будут удалены в версии 5.0.
Устаревшие классы
| Класс | Замена |
|---|---|
MoonShine\Laravel\Notifications\NotificationButton |
MoonShine\Crud\Notifications\NotificationButton |
MoonShine\Laravel\Http\Responses\MoonShineJsonResponse |
MoonShine\Crud\JsonResponse |
MoonShine\Laravel\MoonShineUI |
Вместо MoonShineUI::toast() теперь хелпер toast() |
MoonShine\Laravel\Handlers\Handlers |
MoonShine\Crud\Handlers\BaseHandlers |
MoonShine\Laravel\Handlers\Handler |
MoonShine\Crud\Handlers\BaseHandler |
Устаревшие методы в ModelResource
| Метод | Замена |
|---|---|
getIgnoredFields() |
Перенесено в IndexPage |
filters() |
Перенесено в IndexPage |
hasFilters() |
Перенесено в IndexPage |
queryTags() |
Перенесено в IndexPage |
hasQueryTags() |
Перенесено в IndexPage |
handlers() |
Перенесено в IndexPage |
hasHandlers() |
Перенесено в IndexPage |
getHandlers() |
Перенесено в IndexPage |
Устаревшие трейты
| Трейт | Замена |
|---|---|
HasFilters |
Перенос в IndexPage |
HasQueryTags |
Перенос в IndexPage |
HasHandlers |
Перенос в IndexPage |
Все перечисленные классы и методы будут полностью удалены в версии 5.0. Рекомендуется перейти на новые альтернативы.
Асинхронные методы
Всем асинхронным методам нужно добавить атрибут #[AsyncMethod].
Асинхронные методы теперь поддерживают "DI".
use MoonShine\Crud\JsonResponse;use MoonShine\Support\Attributes\AsyncMethod;class MyPage extends Page{#[AsyncMethod]public function someAsyncMethod(JsonResponse $response): JsonResponse{return $response->toast('Loaded successfully');}}use MoonShine\Crud\JsonResponse;use MoonShine\Support\Attributes\AsyncMethod;class MyPage extends Page{#[AsyncMethod]public function someAsyncMethod(JsonResponse $response): JsonResponse{return $response->toast('Loaded successfully');}}