Основы
В 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'] ]; }}
Сообщения
Используя метод validationMessages()
, вы можете создать свои собственные сообщения об ошибках валидации.
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() ]); }}
Отображение ошибок
По умолчанию ошибки валидации отображаются в верхней части формы.
Свойство $errorsAbove
используется для управления отображением ошибок валидации в верхней части формы.
Актуально только если "Асинхронный режим" выключен.
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; // ...}
Кнопки
Для добавления кнопок используйте ActionButton
и метод formButtons()
в ресурсе.
Подробнее о ActionButton.
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; // ...}
Модификация
Компоненты
Вы можете полностью заменить или модифицировать FormBuilder
ресурса для страницы редактирования.
Для этого воспользуйтесь методом modifyFormComponent()
.
use MoonShine\Contracts\UI\ComponentContract; public function modifyFormComponent( ComponentContract $component): ComponentContract{ return parent::modifyFormComponent($component) ->customAttributes([ 'data-my-attr' => 'value' ]);}