Метод safe
Метод safe применяется к объекту запроса FormRequest
и возвращает коллекцию только тех полей, которые прошли
валидацию. Первым параметром можно передать массив ключей
для извлечения, либо вызвать без параметров для получения
всех валидированных данных. Метод гарантирует, что в
результат попадут только поля, описанные в правиле rules.
Синтаксис
<?php
$safeData = $request->safe();
$safeData = $request->safe(['name', 'email']);
?>
Пример
Давайте создадим класс запроса для валидации пользовательских
данных и используем метод safe для получения безопасных
полей:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class UserRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'age' => 'nullable|integer|min:18',
'role' => 'required|in:admin,user',
'token' => 'required|string',
'admin_token' => 'required|string',
];
}
}
?>
Теперь в контроллере используем метод safe для получения
только валидированных данных:
<?php
namespace AppHttpControllers;
use AppHttpRequestsUserRequest;
use AppModelsUser;
class UserController extends Controller
{
public function store(UserRequest $request)
{
$safeData = $request->safe();
// Доступны только безопасные поля
$user = User::create([
'name' => $safeData['name'],
'email' => $safeData['email'],
'age' => $safeData['age'] ?? null,
'role' => $safeData['role'],
]);
return response()->json($user, 201);
}
}
?>
Результат выполнения кода:
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"age": 25,
"role": "user",
"created_at": "2026-09-07T10:00:00.000000Z",
"updated_at": "2026-09-07T10:00:00.000000Z"
}
Пример
Давайте используем метод safe с массивом ключей для
извлечения только определённых полей:
<?php
namespace AppHttpControllers;
use AppHttpRequestsUserRequest;
class UserController extends Controller
{
public function update(UserRequest $request)
{
// Получаем только name и email
$safeData = $request->safe(['name', 'email']);
// Выводим результат
echo "Name: " . $safeData['name'] . "\n";
echo "Email: " . $safeData['email'] . "\n";
// Поле age не будет доступно в $safeData
if (isset($safeData['age'])) {
echo "Age: " . $safeData['age'];
} else {
echo "Age field is not safe";
}
}
}
?>
Результат выполнения кода:
"Name: John Doe"
"Email: john@example.com"
"Age field is not safe"
Пример
Давайте используем метод safe для получения данных в
виде коллекции и работы с ними:
<?php
namespace AppHttpControllers;
use AppHttpRequestsProfileRequest;
class ProfileController extends Controller
{
public function store(ProfileRequest $request)
{
$safeData = $request->safe();
// Проверяем наличие полей
if ($safeData->has('name')) {
echo "Name is present: " . $safeData->get('name') . "\n";
}
// Получаем все ключи
$keys = $safeData->keys();
echo "Safe fields: " . implode(', ', $keys->toArray()) . "\n";
// Преобразуем в массив
$array = $safeData->toArray();
echo "Total fields: " . count($array);
}
}
?>
Результат выполнения кода:
"Name is present: John Doe"
"Safe fields: name, email, age, role"
"Total fields: 4"
Смотрите также
-
метод
validated,
который возвращает массив валидированных данных -
метод
rules,
который определяет правила валидации -
метод
authorize,
который определяет права доступа к запросу -
класс
FormRequest,
который является базовым классом для запросов