Upgrade guide

Upgrading To 2.0 From 1.5

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": "^1.60"
"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 Icons

В MoonShine 2.0 используются только иконки из набора Heroicons, поэтому необходимо произвести замену старых системных иконок (add, app, bookmark, bookmark, clip, delete, edit, export, filter, search, show и users).

За более подробной информацией обратитесь к разделу Icons .

5 Resources

В MoonShine 2.0 ресурсы изолированны от моделей, но есть специальный ModelResource для работы с Eloquent.

Resource необходимо заменить на ModelResource, публичные свойства на защищенные.

Свойство для отображения в полях отношений titleField необходимо переименовать в column.

Свойство для перехода после сохранения routeAfterSave в MoonShine 2.0 переименовано на redirectAfterSave, либо можно воспользоваться методом redirectAfterSave(), который возвращает строку с маршрутом для перенаправления.

За более подробной информацией обратитесь к разделу Resources .

Так же были переименованы некоторые свойства.

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 Fields

Изменения в 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 Filters

В админ-панели MoonShine 2.0 для построения фильтров используются так же поля, дублирующие поля для фильтров были исключены.

За более подробной информацией обратитесь к разделу Filters .

8 Import / Export

По умолчанию импорт и экспорт уже включен во все ресурсы модели.

use MoonShine\Actions\ExportAction;
use MoonShine\Actions\ImportAction;
 
class ArticleResource extends ModelResource
{
//...
 
public function actions(): array
{
return [
ExportAction::make('Export'),
ImportAction::make('Import')
];
}
}

За более подробной информацией обратитесь к разделу Import/Export .

9 Actions

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

Если во время обновления ассеты не были опубликованы, то их необходимо опубликовать.

php artisan moonshine:publish

или

php artisan vendor:publish --tag=laravel-assets --ansi --force

11 Config

В новой версии MoonShine полностью изменился сonfig. Опубликовать новый конфигурационный файл можно через консольную команду. После публикации, внесите необходимые корректировки.

php artisan moonshine:install

12 Dashboard

Dashboard как и CustomPage теперь это Pages . После установки, для Dashboard генерируется страница app/MoonShine/Pages/Dashboard.php. Необходимо перенести все компоненты в новую страницу.

Поздравляем вас с успешным обновлением проекта!