В 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']
];
}
}
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']
];
}
}
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']
];
}
}
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']
];
}
}
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'
];
}
}
namespaces
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'
];
}
}
namespaces
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()
]);
}
}
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()
]);
}
}
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()
]);
}
}
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()
]);
}
}
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;
}
namespaces
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;
// ...
}
namespaces
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 валидацию, необходим метод precognitive().
Подробности в документации Laravel.
namespace App\MoonShine\Resources;
use MoonShine\Laravel\Resources\ModelResource;
class PostResource extends ModelResource
{
protected bool $isPrecognitive = true;
}
namespaces
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;
// ...
}
namespaces
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() в ресурсе.
use MoonShine\Support\ListOf;
use MoonShine\UI\Components\ActionButton;
protected function formButtons(): ListOf
{
return parent::formButtons()->add(ActionButton::make('Link', '/endpoint'));
}
namespaces
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'));
}
namespaces
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;
}
namespaces
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;
// ...
}
namespaces
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'
]);
}
namespaces
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'
]);
}
namespaces
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'
]);
}