- 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"},}
"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
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;}),//...]);];}}
-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'];//...}
-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\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());//...}//...}
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')];}}
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))];}}
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
composer update
Если в момент обновления не были опубликованы assets, их необходимо опубликовать.
php artisan moonshine:publish
php artisan moonshine:publish
или
php artisan vendor:publish --tag=laravel-assets --ansi --force
php artisan vendor:publish --tag=laravel-assets --ansi --force
11. Конфигурация
В новой версии MoonShine полностью изменен config. Вы можете опубликовать новый файл конфигурации через консольную команду. После публикации внесите необходимые корректировки.
php artisan moonshine:install
php artisan moonshine:install
12. Панель управления
Dashboard, как и CustomPage, теперь являются Страницами. После установки для Dashboard генерируется страница app/MoonShine/Pages/Dashboard.php
. Необходимо перенести все компоненты на новую страницу.
Поздравляем с успешным обновлением проекта!