Метод attributes
Метод attributes класса FormRequest используется для переопределения имён атрибутов полей, которые выводятся в сообщениях об ошибках валидации. Метод должен возвращать массив, где ключами выступают имена полей, а значениями - их человекочитаемые названия. Если не использовать этот метод, Laravel будет выводить в сообщениях об ошибках исходное имя поля.
Синтаксис
<?php
class MyRequest extends FormRequest
{
public function attributes()
{
return [
'field_name' => 'Human Readable Name',
'other_field' => 'Another Name'
];
}
}
?>
Пример
Создадим класс запроса для валидации данных пользователя и определим понятные названия для полей:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'full_name' => 'required|string|max:255',
'email_address' => 'required|email|unique:users,email',
'age' => 'required|integer|min:18'
];
}
public function attributes()
{
return [
'full_name' => 'Full Name',
'email_address' => 'Email Address',
'age' => 'Age'
];
}
}
?>
Теперь используем этот запрос в контроллере. При ошибке валидации пользователь увидит понятные названия полей:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
$validated = $request->validated();
// Сохранение пользователя
return response()->json(['message' => 'User created']);
}
}
?>
Если поле 'full_name' будет пустым, сообщение об ошибке будет выглядеть так:
"The Full Name field is required."
Пример
Метод attributes можно комбинировать с методом messages для полной кастомизации сообщений об ошибках. Определим запрос для формы регистрации:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RegisterRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'username' => 'required|string|min:3|max:50',
'password' => 'required|string|min:8|confirmed',
'phone' => 'required|string|size:10'
];
}
public function attributes()
{
return [
'username' => 'Username',
'password' => 'Password',
'phone' => 'Phone Number'
];
}
}
?>
При неверном формате номера телефона пользователь получит сообщение с понятным названием поля:
"The Phone Number must be exactly 10 characters."