From 41b8afa4048601bf3f339fd539ac5a3e1be3069e Mon Sep 17 00:00:00 2001 From: Alexander Nikushkin Date: Sat, 11 Nov 2023 00:22:56 +0500 Subject: [PATCH] docs: Upgrade guide --- .../views/pages/ru/upgrade_guide.blade.php | 351 +++++++++++++++++- 1 file changed, 350 insertions(+), 1 deletion(-) diff --git a/resources/views/pages/ru/upgrade_guide.blade.php b/resources/views/pages/ru/upgrade_guide.blade.php index 428e7d98..190e34f0 100644 --- a/resources/views/pages/ru/upgrade_guide.blade.php +++ b/resources/views/pages/ru/upgrade_guide.blade.php @@ -1,8 +1,357 @@ - + Upgrading To 2.0 From 1.5 +Минимальные требования + + + +Composer.json + + + Изменить версию MoonShine. + + + +"require": { + "php": "^8.1", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^10.23", + "lee-to/moonshine-algolia-search": "^1.0", + "moonshine/moonshine": "^1.60" // [tl! -- **] + "moonshine/moonshine": "^2.0.0.rc.3" // [tl! ++ **] +}, + + + + Выполнить консольную команду. + + + +composer update + + + + В процессе обновления возникнут ошибки. Это связано с тем что некоторые компоненты админ-панели были изменены. + Следующие шаги помогут устранить эти ошибки. + + +MoonShineServiceProvider + + + Необходимо изменить MoonShineServiceProvider. Он теперь наследуется от MoonShineApplicationServiceProvider, + а объявление меню вынесено в отдельный метод menu(). + + + +use Illuminate\Support\ServiceProvider; // [tl! -- **] +use MoonShine\Providers\MoonShineApplicationServiceProvider; // [tl! ++ **] +//... + +class MoonShineServiceProvider extends ServiceProvider // [tl! -- **] +class MoonShineServiceProvider extends MoonShineApplicationServiceProvider // [tl! ++ **] +{ + + public function boot(): void // [tl! -- **] + protected function menu(): array // [tl! ++ **] + { + app(MoonShine::class)->menu([ // [tl! -- **] + return [ // [tl! ++ **] + 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; + }), + + //... + + ]); // [tl! -- **] + ]; // [tl! ++ **] + } +} + + +Icons + + + В MoonShine 2.0 используются только иконки из набора Heroicons, + поэтому необходимо произвести замену старых системных иконок (add, app, bookmark, + bookmark, clip, delete, edit, export, filter, search, show и users). + + + + За более подробной информацией обратитесь к разделу + Icons. + + +Resources + + + В MoonShine 2.0 ресурсы изолированны от моделей, + но есть специальный ModelResource для работы с Eloquent. + + + + Resource необходимо заменить на ModelResource, публичные свойства на защищенные. + + + + Свойство для отображения в полях отношений titleField необходимо переименовать в column. + + + + Свойство для перехода после сохранения routeAfterSave в MoonShine 2.0 заменено на + метод redirectAfterSave() который возвращает строку с маршрутом на который необходимо сделать + перенаправление. + + + + Так же были переименованы некоторые свойства. + + + +use MoonShine\Resources\Resource; // [tl! -- **] +use MoonShine\Resources\ModelResource; // [tl! ++ **] + +//... + +class ArticleResource extends Resource // [tl! -- **] +class ArticleResource extends ModelResource // [tl! ++ **] +{ + public static string $model = Article::class; // [tl! -- **] + protected string $model = Article::class; // [tl! ++ **] + + public static string $title = 'Articles'; // [tl! -- **] + protected string $title = 'Articles'; // [tl! ++ **] + + public string $titleField = 'title'; // [tl! -- **] + protected string $column = 'title'; // [tl! ++ **] + + protected string $routeAfterSave = 'index'; // [tl! -- **] + + public static string $orderField = 'created_at'; // [tl! -- **] + protected string $sortColumn = 'created_at'; // [tl! ++ **] + + public static string $orderType = 'DESC'; // [tl! -- **] + protected string $sortDirection = 'DESC'; // [tl! ++ **] + + public static array $with = ['author', 'comments']; // [tl! -- **] + protected array $with = ['author', 'comments']; // [tl! ++ **] + + //... + +} + + +Fields + + + Изменения в MoonShine 2.0 затронули и поля. + + + + У всех полей отношений изменился namespace. + + + +use MoonShine\Fields\Relationships\BelongsTo; // [tl! -- **] +use MoonShine\Fields\Relationships\BelongsTo; // [tl! ++ **] + +use MoonShine\Fields\Relationships\BelongsToMany; // [tl! -- **] +use MoonShine\Fields\Relationships\BelongsToMany; // [tl! ++ **] + +use MoonShine\Fields\Relationships\HasMany; // [tl! -- **] +use MoonShine\Fields\Relationships\HasMany; // [tl! ++ **] + +use MoonShine\Fields\Relationships\HasManyThrough; // [tl! -- **] +use MoonShine\Fields\Relationships\HasManyThrough; // [tl! ++ **] + +use MoonShine\Fields\Relationships\HasOne; // [tl! -- **] +use MoonShine\Fields\Relationships\HasOne; // [tl! ++ **] + +use MoonShine\Fields\Relationships\HasOneThrough; // [tl! -- **] +use MoonShine\Fields\Relationships\HasOneThrough; // [tl! ++ **] + +use MoonShine\Fields\Relationships\MorphMany; // [tl! -- **] +use MoonShine\Fields\Relationships\MorphMany; // [tl! ++ **] + +use MoonShine\Fields\Relationships\MorphTo; // [tl! -- **] +use MoonShine\Fields\Relationships\MorphTo; // [tl! ++ **] + +use MoonShine\Fields\Relationships\MorphToMany; // [tl! -- **] +use MoonShine\Fields\Relationships\MorphToMany; // [tl! ++ **] + + + + У полей отношений обязательно необходимо указать ресурс модели.
+ Второй параметр - не поле в таблице, а наименование отношения! +
+ + +use MoonShine\Fields\Relationships\BelongsTo; + +class ArticleResource extends ModelResource +{ + //... + + public function fields(): array + { + BelongsTo::make('Author', resource: 'name') // [tl! -- **] + BelongsTo::make('Author', 'author', resource: new MoonShineUserResource()); // [tl! ++ **] + + //... + } + + //... +} + + + + В MoonShine 2.0 для полей HasOne и HasMany больше нет разделения и + отображаются только в resourceMode режиме. Методы removable() и fullPage() были исключены.
+ Если данные поля необходимо расположить в основной форме, + то можно воспользоваться полем + Json в режиме отношения. +
+ + + Метод onlyCount() поля HasMany переименован в onlyLink() + и теперь позволяет отобразить не только количество, но и создает ссылку для их просмотра записей. + + + + У поля отношения BelongsToMany метод select() переименован в selectMode(). + + + +
    +
  • + SwitchBoolean переименован в Switcher +
  • +
  • + SlideField переименован в RangeSlider +
  • +
+
+ +Filters + + + В админ-панели MoonShine 2.0 для построения фильтров используются так же поля, + дублирующие поля для фильтров были исключены. + + + + За более подробной информацией обратитесь к разделу + Filters. + + +Import / Export + + + По умолчанию импорт и экспорт уже включен во все ресурсы модели. + + + +use MoonShine\Actions\ExportAction; // [tl! -- **] +use MoonShine\Actions\ImportAction; // [tl! -- **] + +class ArticleResource extends ModelResource +{ + //... + + public function actions(): array // [tl! -- **] + { // [tl! -- **] + return [ // [tl! -- **] + ExportAction::make('Export'), // [tl! -- **] + ImportAction::make('Import') // [tl! -- **] + ]; // [tl! -- **] + } // [tl! -- **] +} + + + + За более подробной информацией обратитесь к разделу + Import/Export. + + +Actions + + + ItemActions, FormActions и DetailActions и + соответствующие методы были исключены из админ-панели.
+ В MoonShine 2.0 эту функцию выполняет ActionButton. +
+ + + +use MoonShine\FormActions\FormAction; // [tl! -- **] +use MoonShine\ItemActions\ItemAction; // [tl! -- **] + +class ArticleResource extends ModelResource +{ + //... + + public function itemActions(): array // [tl! -- **] + public function indexButtons(): array // [tl! ++ **] + { + return [ + ItemAction::make('Go to', fn (Article $item) => to_route('articles.show', $item)) // [tl! -- **] + ActionButton::make('Go to', fn (Article $item) => to_route('articles.show', $item)) // [tl! ++ **] + ]; + } +} + + + + За более подробной информацией обратитесь к разделу + ActionButton. + + +Обновление зависимостей + + + После внесения всех изменений, необходимо попытаться еще раз выполнить обновление зависимостей. + Обновление должно завершиться без ошибок. + + + +composer update + + +Config + + + В новой версии MoonShine полностью изменился сonfig. + Опубликовать новый конфигурационный файл можно через консольную команду. + После публикации, можно внести необходимые изменения. + + + +php artisan moonsine:install + + +Dashboard + + + Dashboard как и CustomPage теперь это + Pages. + После установки, для Dashboard генерируется страница app/MoonShine/Pages/Dashboard.php. + Необходимо перенести все компоненты в новую страницу. + + + + Поздравляем вас с успешным обновлением проекта! +