Метод validated
Метод validated применяется к объекту FormRequest после успешной валидации и возвращает массив проверенных данных. Он доступен в контроллере после того, как запрос прошёл проверку. Первым параметром метод ничего не принимает, но можно передать ключ для получения конкретного поля. Если поле не найдено, возвращается null.
Синтаксис
<?php
$data = $request->validated();
$field = $request->validated('field_name');
?>
Пример
Давайте создадим класс запроса для валидации данных статьи:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class ArticleRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'title' => 'required|string|max:255',
'content' => 'required|string',
'status' => 'required|in:draft,published',
];
}
}
?>
Теперь используем метод validated в контроллере:
<?php
namespace AppHttpControllers;
use AppHttpRequestsArticleRequest;
use AppModelsArticle;
class ArticleController extends Controller
{
public function store(ArticleRequest $request)
{
$validated = $request->validated();
$article = Article::create($validated);
return response()->json([
'message' => 'Article created successfully',
'article' => $article,
]);
}
}
?>
Пример
Получим конкретное поле из проверенных данных:
<?php
namespace AppHttpControllers;
use AppHttpRequestsArticleRequest;
class ArticleController extends Controller
{
public function store(ArticleRequest $request)
{
$title = $request->validated('title');
$content = $request->validated('content');
$res = "Title: " . $title . ", Content: " . $content;
return response()->json(['data' => $res]);
}
}
?>
Пример
Проверим, что метод возвращает только проверенные поля, игнорируя лишние:
<?php
namespace AppHttpControllers;
use AppHttpRequestsArticleRequest;
class ArticleController extends Controller
{
public function store(ArticleRequest $request)
{
$validated = $request->validated();
$res = $validated;
return response()->json($res);
}
}
?>
Результат выполнения кода при отправке данных:
[
"title" => "My Article",
"content" => "Article content here",
"status" => "published"
]
Обратите внимание, что поля 'extra_field', которые не указаны в правилах, не попадут в массив проверенных данных. Это обеспечивает безопасность и предотвращает массовое заполнение нежелательными полями.