Laravel 5.7:表单验证的自定义属性不起作用
Laravel 5.7: Custom attributes for form validation not working
我想使用自定义消息和属性来验证表单。例如,用户应该看到 Name: Please use fewer characters.
而不是 name: The name may not be greater than 20 characters.
。
我正在使用 AJAX 以及 Laravel returns 的 response.data.errors
对象的键和值。我正在使用 Laravel 5.7.
这是我 RegisterController
中 validator
函数的简化版本。
protected function validator(array $data)
{
// Nice attribute names
$attributes = [
'name' => 'Name',
// ...
];
// Custom messages
$messages = [
'max' => 'Please use fewer characters.'
// ...
];
// Rules
$rules = [
'name'=> 'required|max:20',
// ...
];
// Working for messages, but not for attribute names
$validator = Validator::make($data, $rules, $messages, $attributes);
// Also not working
// $validator->setAttributeNames($attributes);
return $validator;
}
当出现验证错误时,用户会收到类似 name: Please use fewer characters.
的消息。这意味着显示来自我的自定义数组的消息,但使用默认属性名称。这里有什么问题?
来自位于 resources/Lang/xx/
的 validation.php
编辑:
你必须使用
$messages = [
'name.max' => 'Your sentence here',
];
属性不会替换键名,它们用于更改消息中键的外观 - 即 The Name field is required
- 要实现您在问题中尝试做的事情,您需要创建一个新的数据数组。
protected function validator(array $data)
{
$data = [
'Name' => $data['name'] ?? '',
// ...
];
// ...
Validator::make($data, $rules, $messages);
}
使用 Laravel Form Request,向下滚动到 Customizing The Error Messages
部分。查看下面的示例代码。
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UserRegistrationForm extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:20',
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'name.max' => 'Please use less characters'
];
}
}
在控制器中
public function register(UserRegistrationForm $request)
{
// do saving here
}
我想使用自定义消息和属性来验证表单。例如,用户应该看到 Name: Please use fewer characters.
而不是 name: The name may not be greater than 20 characters.
。
我正在使用 AJAX 以及 Laravel returns 的 response.data.errors
对象的键和值。我正在使用 Laravel 5.7.
这是我 RegisterController
中 validator
函数的简化版本。
protected function validator(array $data)
{
// Nice attribute names
$attributes = [
'name' => 'Name',
// ...
];
// Custom messages
$messages = [
'max' => 'Please use fewer characters.'
// ...
];
// Rules
$rules = [
'name'=> 'required|max:20',
// ...
];
// Working for messages, but not for attribute names
$validator = Validator::make($data, $rules, $messages, $attributes);
// Also not working
// $validator->setAttributeNames($attributes);
return $validator;
}
当出现验证错误时,用户会收到类似 name: Please use fewer characters.
的消息。这意味着显示来自我的自定义数组的消息,但使用默认属性名称。这里有什么问题?
来自位于 resources/Lang/xx/
的 validation.php编辑:
你必须使用
$messages = [
'name.max' => 'Your sentence here',
];
属性不会替换键名,它们用于更改消息中键的外观 - 即 The Name field is required
- 要实现您在问题中尝试做的事情,您需要创建一个新的数据数组。
protected function validator(array $data)
{
$data = [
'Name' => $data['name'] ?? '',
// ...
];
// ...
Validator::make($data, $rules, $messages);
}
使用 Laravel Form Request,向下滚动到 Customizing The Error Messages
部分。查看下面的示例代码。
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UserRegistrationForm extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:20',
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'name.max' => 'Please use less characters'
];
}
}
在控制器中
public function register(UserRegistrationForm $request)
{
// do saving here
}