Формы

# Основы

Валидация выполнена так же просто, как и в 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']
];
}
 
//...
}

# Сообщения

Используя метод 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' => '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()
]);
}
 
//...
}

# Кнопки

Для добавления кнопок используются ActionButton и методы FormButtons или buttons в ресурсе

public function formButtons(): array
{
return [
ActionButton::make('Link', '/endpoint'),
];
}

Также можно воспользоваться методом buttons, но в таком случае кнопки будут и на всех остальных страницах ресурса

public function buttons(): array
{
return [
ActionButton::make('Link', '/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;
 
// ...
}

Переключить режим формы в Precognitive валидацию

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;
 
// ...
}