Основы
В CrudResource
(ModelResource
) на странице formPage
используется FormBuilder
, поэтому мы рекомендуем вам также изучить раздел документации FormBuilder.
Валидация
Валидация так же проста, как и в классах FormRequests
из Laravel.
Достаточно добавить правила в метод rules()
ресурса модели обычным способом.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...protected function rules(mixed $item): array{return ['title' => ['required', 'string', 'min:5']];}}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...protected function rules(mixed $item): array{return ['title' => ['required', 'string', 'min:5']];}}
Сообщения
Используя метод validationMessages()
, вы можете создать свои собственные сообщения об ошибках валидации.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...public function validationMessages(): array{return ['email.required' => 'Требуется email'];}}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...public function validationMessages(): array{return ['email.required' => 'Требуется email'];}}
Подготовка входных данных для проверки
Если вам нужно подготовить или очистить какие-либо данные из запроса перед применением правил валидации, вы можете использовать метод prepareForValidation()
.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...public function prepareForValidation(): void{request()?->merge(['email' => request()?->string('email')->lower()->value()]);}}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{// ...public function prepareForValidation(): void{request()?->merge(['email' => request()?->string('email')->lower()->value()]);}}
Отображение ошибок
По умолчанию ошибки валидации отображаются в верхней части формы.
Свойство $errorsAbove
используется для управления отображением ошибок валидации в верхней части формы.
Актуально только если "Асинхронный режим" выключен.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $errorsAbove = true;// ...}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $errorsAbove = true;// ...}
Precognition
Если необходимо предварительно выполнить precognition
валидацию, необходим метод precognitive()
.
Подробности в документации Laravel.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $isPrecognitive = true;// ...}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $isPrecognitive = true;// ...}
Кнопки
Для добавления кнопок используйте ActionButton
и метод formButtons()
в ресурсе.
Подробнее о ActionButton.
use MoonShine\Support\ListOf;use MoonShine\UI\Components\ActionButton;protected function formButtons(): ListOf{return parent::formButtons()->add(ActionButton::make('Link', '/endpoint'));}
use MoonShine\Support\ListOf;use MoonShine\UI\Components\ActionButton;protected function formButtons(): ListOf{return parent::formButtons()->add(ActionButton::make('Link', '/endpoint'));}
Асинхронный режим
По умолчанию в ModelResource
включен "Асинхронный режим", но если вам требуется его выключить, то установить свойство $isAsync
= false.
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $isAsync = false;// ...}
namespace App\MoonShine\Resources;use MoonShine\Laravel\Resources\ModelResource;class PostResource extends ModelResource{protected bool $isAsync = false;// ...}
Модификация
Компоненты
Вы можете полностью заменить или модифицировать FormBuilder
ресурса для страницы редактирования.
Для этого воспользуйтесь методом modifyFormComponent()
.
use MoonShine\Contracts\UI\ComponentContract;public function modifyFormComponent(ComponentContract $component): ComponentContract{return parent::modifyFormComponent($component)->customAttributes(['data-my-attr' => 'value']);}
use MoonShine\Contracts\UI\ComponentContract;public function modifyFormComponent(ComponentContract $component): ComponentContract{return parent::modifyFormComponent($component)->customAttributes(['data-my-attr' => 'value']);}