- 1. Минимальные требования
- 2. Composer.json
- 3. MoonShineServiceProvider
- 4. Иконки
- 5. Ресурсы
- 6. Поля
- 7. Фильтры
- 8. Импорт / Экспорт
- 9. Действия
- 10. Обновление зависимостей
- 11. Конфигурация
- 12. Панель управления
Видео руководство по обновлению
1. Минимальные требования
- php >=8.1,
- laravel >= 10.23.
Перед обновлением рекомендуется удалить папку public/vendor/moonshine
.
2. Composer.json
Измените версию MoonShine.
"require": { "php": "^8.1", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.23", "lee-to/moonshine-algolia-search": "^1.0", "moonshine/moonshine": "^2.0" },}
Выполните консольную команду.
composer update
В процессе обновления будут возникать ошибки. Это связано с тем, что некоторые компоненты панели администрирования были изменены. Следующие шаги помогут устранить эти ошибки.
3. MoonShineServiceProvider
Необходимо изменить MoonShineServiceProvider
. Теперь он наследуется от MoonShineApplicationServiceProvider, а объявление меню перенесено в отдельный метод menu()
.
-use Illuminate\Support\ServiceProvider; +use MoonShine\Providers\MoonShineApplicationServiceProvider; //... -class MoonShineServiceProvider extends ServiceProvider +class MoonShineServiceProvider extends MoonShineApplicationServiceProvider { - public function boot(): void + protected function menu(): array { app(MoonShine::class)->menu([ return [ MenuGroup::make('System', [ MenuItem::make('Settings', new SettingResource(), 'heroicons.outline.adjustments-vertical'), MenuItem::make('Admins', new MoonShineUserResource(), 'heroicons.outline.users'), MenuItem::make('Roles', new MoonShineUserRoleResource(), 'heroicons.outline.shield-exclamation'), ], 'heroicons.outline.user-group')->canSee(static function () { return auth('moonshine')->user()->moonshine_user_role_id === 1; }), //... ]); ]; } }
4. Иконки
MoonShine 2.0 использует только иконки из набора Heroicons, поэтому необходимо заменить старые системные иконки (add, app, bookmark, bookmark, clip, delete, edit, export, filter, search, show и users).
Для более подробной информации обратитесь к разделу Иконки.
5. Ресурсы
В MoonShine 2.0 ресурсы изолированы от моделей, но есть специальный ModelResource для работы с Eloquent.
Resource следует заменить на ModelResource, публичные свойства на защищенные свойства.
Свойство для отображения в полях отношений titleField
следует переименовать в column
.
Свойство для перехода после сохранения routeAfterSave
в MoonShine 2.0 переименовано в redirectAfterSave
, или можно использовать метод redirectAfterSave()
, который возвращает строку с маршрутом для перенаправления.
Для получения дополнительной информации обратитесь к разделу Ресурсы.
Также были переименованы некоторые свойства.
-use MoonShine\Resources\Resource; +use MoonShine\Resources\ModelResource; //... -class ArticleResource extends Resource +class ArticleResource extends ModelResource {- public static string $model = Article::class; + protected string $model = Article::class; - public static string $title = 'Articles'; + protected string $title = 'Articles'; - public string $titleField = 'title'; + protected string $column = 'title'; + protected string $routeAfterSave = 'index'; - public static string $orderField = 'created_at'; + protected string $sortColumn = 'created_at'; - public static string $orderType = 'DESC'; + protected string $sortDirection = 'DESC'; - public static array $with = ['author', 'comments']; + protected array $with = ['author', 'comments']; //... }
6. Поля
Изменения в MoonShine 2.0 затрагивают и поля.
У всех полей отношений изменен namespace.
-use MoonShine\Fields\BelongsTo; +use MoonShine\Fields\Relationships\BelongsTo; -use MoonShine\Fields\BelongsToMany; +use MoonShine\Fields\Relationships\BelongsToMany; -use MoonShine\Fields\HasMany; +use MoonShine\Fields\Relationships\HasMany; -use MoonShine\Fields\HasManyThrough; +use MoonShine\Fields\Relationships\HasManyThrough; -use MoonShine\Fields\HasOne; +use MoonShine\Fields\Relationships\HasOne; -use MoonShine\Fields\HasOneThrough; +use MoonShine\Fields\Relationships\HasOneThrough; -use MoonShine\Fields\MorphMany; +use MoonShine\Fields\Relationships\MorphMany; -use MoonShine\Fields\MorphTo; +use MoonShine\Fields\Relationships\MorphTo; -use MoonShine\Fields\MorphToMany; +use MoonShine\Fields\Relationships\MorphToMany;
Для полей отношений обязательно указывать ресурс модели. Второй параметр - не поле в таблице, а название отношения!
use MoonShine\Fields\Relationships\BelongsTo; class ArticleResource extends ModelResource{ //... public function fields(): array { BelongsTo::make('Author', resource: 'name') BelongsTo::make('Author', 'author', resource: new MoonShineUserResource()); //... } //...}
В MoonShine 2.0 для полей HasOne и HasMany больше нет разделения и отображаются только в resourceMode. Методы removable()
и fullPage()
были исключены.
Если эти поля должны быть размещены в основной форме, можно использовать поле Json в режиме отношений.
Метод onlyCount()
полей HasMany переименован в onlyLink()
и теперь позволяет отображать не только количество, но и создает ссылку для просмотра их записей.
У поля отношений BelongsToMany метод select()
переименован в selectMode()
.
SwitchBoolean
переименован вSwitcher
,SlideField
переименован вRangeSlider
.
7. Фильтры
В панели администрирования MoonShine 2.0 для построения фильтров используются те же поля, дублирующие поля для фильтров устранены.
Для получения дополнительной информации обратитесь к разделу Фильтры.
8. Импорт / Экспорт
По умолчанию импорт и экспорт уже включены во все ресурсы моделей.
use MoonShine\Actions\ExportAction;use MoonShine\Actions\ImportAction;//... class ArticleResource extends ModelResource{ //... public function actions(): array { return [ ExportAction::make('Export'), ImportAction::make('Import') ]; }}
Для получения дополнительной информации обратитесь к разделу Импорт/Экспорт.
9. Действия
ItemActions
, FormActions
и DetailActions
и соответствующие методы были исключены из панели администрирования. В MoonShine 2.0 эту функцию выполняет ActionButton
.
use MoonShine\FormActions\FormAction; use MoonShine\ItemActions\ItemAction; class ArticleResource extends ModelResource { //... - public function itemActions(): array + public function indexButtons(): array { return [ ItemAction::make('Go to', fn (Article $item) => to_route('articles.show', $item)) ActionButton::make('Go to', fn (Article $item) => to_route('articles.show', $item)) ]; } }
Для получения дополнительной информации обратитесь к разделу ActionButton.
10. Обновление зависимостей
После внесения всех изменений следует попробовать снова обновить зависимости. Обновление должно завершиться без ошибок.
composer update
Если в момент обновления не были опубликованы assets, их необходимо опубликовать.
php artisan moonshine:publish
или
php artisan vendor:publish --tag=laravel-assets --ansi --force
11. Конфигурация
В новой версии MoonShine полностью изменен config. Вы можете опубликовать новый файл конфигурации через консольную команду. После публикации внесите необходимые корректировки.
php artisan moonshine:install
12. Панель управления
Dashboard, как и CustomPage, теперь являются Страницами. После установки для Dashboard генерируется страница app/MoonShine/Pages/Dashboard.php
. Необходимо перенести все компоненты на новую страницу.
Поздравляем с успешным обновлением проекта!