ModelResource

Форма

Основы

В CrudResource(ModelResource) на странице formPage используется FormBuilder, поэтому мы рекомендуем вам также изучить раздел документации FormBuilder.

Валидация

Валидация так же проста, как и в классах FormRequests из Laravel.

Достаточно добавить правила в метод rules() ресурса модели обычным способом.

 namespaces
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']
];
}
}

validation validation_dark

Сообщения

Используя метод validationMessages(), вы можете создать свои собственные сообщения об ошибках валидации.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
// ...
 
public function validationMessages(): array
{
return [
'email.required' => 'Требуется email'
];
}
}

Подготовка входных данных для проверки

Если вам нужно подготовить или очистить какие-либо данные из запроса перед применением правил валидации, вы можете использовать метод prepareForValidation().

 namespaces
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 используется для управления отображением ошибок валидации в верхней части формы.

Актуально только если "Асинхронный режим" выключен.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected bool $errorsAbove = true;
 
// ...
}

Precognition

Если необходимо предварительно выполнить precognition валидацию, необходим метод precognitive().

Подробности в документации Laravel.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected bool $isPrecognitive = true;
 
// ...
}

Кнопки

Для добавления кнопок используйте ActionButton и метод formButtons() в ресурсе.

Подробнее о ActionButton.

 namespaces
use MoonShine\Support\ListOf;
use MoonShine\UI\Components\ActionButton;
 
protected function formButtons(): ListOf
{
return parent::formButtons()->add(ActionButton::make('Link', '/endpoint'));
}

Асинхронный режим

По умолчанию в ModelResource включен "Асинхронный режим", но если вам требуется его выключить, то установить свойство $isAsync = false.

 namespaces
namespace App\MoonShine\Resources;
 
use MoonShine\Laravel\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected bool $isAsync = false;
 
// ...
}

Модификация

Компоненты

Вы можете полностью заменить или модифицировать FormBuilder ресурса для страницы редактирования. Для этого воспользуйтесь методом modifyFormComponent().

 namespaces
use MoonShine\Contracts\UI\ComponentContract;
 
public function modifyFormComponent(
ComponentContract $component
): ComponentContract
{
return parent::modifyFormComponent($component)
->customAttributes([
'data-my-attr' => 'value'
]);
}