Валидация так же проста, как и в классах FormRequests
из Laravel.
Достаточно добавить правила в метод rules()
ресурса модели обычным способом.
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
public function rules($item): array
{
return [
'title' => ['required', 'string', 'min:5']
];
}
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function rules($item): array
{
return [
'title' => ['required', 'string', 'min:5']
];
}
//...
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function rules($item): array
{
return [
'title' => ['required', 'string', 'min:5']
];
}
//...
}

Используя метод validationMessages()
, вы можете создать свои собственные сообщения об ошибках валидации.
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
public function validationMessages(): array
{
return [
'email.required' => 'Требуется email'
];
}
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function validationMessages(): array
{
return [
'email.required' => 'Требуется email'
];
}
//...
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function validationMessages(): array
{
return [
'email.required' => 'Требуется email'
];
}
//...
}
Если вам нужно подготовить или очистить какие-либо данные из запроса перед применением правил валидации, вы можете использовать метод prepareForValidation()
.
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
public function prepareForValidation(): void
{
moonshineRequest()?->merge([
'email' => request()
?->string('email')
->lower()
->value()
]);
}
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function prepareForValidation(): void
{
moonshineRequest()?->merge([
'email' => request()
?->string('email')
->lower()
->value()
]);
}
//...
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Fields\Text;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
//...
public function prepareForValidation(): void
{
moonshineRequest()?->merge([
'email' => request()
?->string('email')
->lower()
->value()
]);
}
//...
}
Для добавления кнопок используйте ActionButton и методы FormButtons
или buttons
в ресурсе.
public function formButtons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
public function formButtons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
public function formButtons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
Вы также можете использовать метод buttons
, но в этом случае кнопки будут на всех остальных страницах ресурса.
public function buttons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
public function buttons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
public function buttons(): array
{
return [
ActionButton::make('Ссылка', '/endpoint'),
];
}
Переключите режим без перезагрузки для сохранения данных.
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isAsync = true;
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isAsync = true;
// ...
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isAsync = true;
// ...
}
Переключите режим формы на предварительную валидацию (Precognitive validation).
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isPrecognitive = true;
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isPrecognitive = true;
// ...
}
namespace App\MoonShine\Resources;
use App\Models\Post;
use MoonShine\Resources\ModelResource;
class PostResource extends ModelResource
{
protected string $model = Post::class;
protected string $title = 'Posts';
protected bool $isPrecognitive = true;
// ...
}