Laravel 5.5 使用自定义消息进行验证
Laravel 5.5 validate with custom messages
我正在 laravel 应用程序中处理密码更改表。我想将验证器与自定义错误消息一起使用。
我的代码如下所示:
$rules = [
'username' => 'required|max:255',
'oldpassword' => 'required|max:255',
'newpassword' => 'required|min:6|max:255|alpha_num',
'newpasswordagain' => 'required|same:newpassword',
];
$messages = [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'username.max:255' => Lang::get('userpasschange.usernamemax255'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max:255' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min:6' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max:255' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' => Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
];
$validator = Validator::make($request->all(), $rules, $messages);
$validator->setCustomMessages($messages);
Log::debug("custommessages: " . json_encode($messages));
Log::debug("messages: " . json_encode($validator->messages()));
在日志中 custommessages 显示了我的自定义消息,但在下一行是原始的 messages。
我在official doc工作。
有人遇到过这个问题吗?
谢谢提前回答!
在 Validator::make
中指明消息后
$validator = Validator::make($request->all(), $rules, $messages);
你不应该再指出它们
$validator->setCustomMessages($messages); // don't do that
注意
使用请求验证的更好方法是移动them to another file
重写和推荐的实现方式。
参考手册https://laravel.com/docs/5.5/validation#creating-form-requests
使用请求文件。
- 运行
php artisan make:request UpdateUserPasswordRequest
- 写入请求文件
2020 年 2 月编辑:在授权方法的最新版本 Laravel 中,可以使用全局 auth() 对象代替 \Auth,因此 \Auth::check() 将变为 auth()- >检查()。如果从框架中删除某些内容,两者仍然有效并会更新
<?php
namespace App\Http\Requests;
class UpdateUserPasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// only allow updates if the user is logged in
return \Auth::check();
// In laravel 8 use Auth::check()
// edit you can now replace this with return auth()->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'username' => 'required|max:255',
'oldpassword' => 'required|max:255',
'newpassword' => 'required|min:6|max:255|alpha_num',
'newpasswordagain' => 'required|same:newpassword',
];
}
/**
* Get the validation attributes that apply to the request.
*
* @return array
*/
public function attributes()
{
return [
'username' => trans('userpasschange.username'),
'oldpassword' => trans('userpasschange.oldpassword'),
'newpassword' => trans('userpasschange.newpassword'),
'newpasswordagain' => trans('userpasschange.newpasswordagain'),
];
}
/**
* Get the validation messages that apply to the request.
*
* @return array
*/
public function messages()
{
// use trans instead on Lang
return [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' =>Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
'username.max' => 'The :attribute field must have under 255 chars',
];
}
- 在用户控制器中
<?php namespace App\Http\Controllers;
// VALIDATION: change the requests to match your own file names if you need form validation
use App\Http\Requests\UpdateUserPasswordRequest as ChangePassRequest;
//etc
class UserCrudController extends Controller
{
public function chnagePassword(ChangePassRequest $request)
{
// save new pass since it passed validation if we got here
}
}
$messages = [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'username.max' => Lang::get('userpasschange.usernamemax255'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' => Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
];
尽量不要使用这个 :255 和 :6 结尾。
错误:
'username.max:255' => Lang::get('userpasschange.usernamemax255'),
正确:
'username.max' => Lang::get('userpasschange.usernamemax255'),
对于Laravel7.x,6.x,5.x
定义自定义规则后,您可以在控制器验证中使用它,例如:
$validatedData = $request->validate([
'f_name' => 'required|min:8',
'l_name' => 'required',
],
[
'f_name.required'=> 'Your First Name is Required', // custom message
'f_name.min'=> 'First Name Should be Minimum of 8 Character', // custom message
'l_name.required'=> 'Your Last Name is Required' // custom message
]
);
对于本地化,您可以使用:
['f_name.required'=> trans('user.your first name is required'],
希望这对您有所帮助...
我正在 laravel 应用程序中处理密码更改表。我想将验证器与自定义错误消息一起使用。
我的代码如下所示:
$rules = [
'username' => 'required|max:255',
'oldpassword' => 'required|max:255',
'newpassword' => 'required|min:6|max:255|alpha_num',
'newpasswordagain' => 'required|same:newpassword',
];
$messages = [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'username.max:255' => Lang::get('userpasschange.usernamemax255'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max:255' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min:6' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max:255' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' => Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
];
$validator = Validator::make($request->all(), $rules, $messages);
$validator->setCustomMessages($messages);
Log::debug("custommessages: " . json_encode($messages));
Log::debug("messages: " . json_encode($validator->messages()));
在日志中 custommessages 显示了我的自定义消息,但在下一行是原始的 messages。
我在official doc工作。
有人遇到过这个问题吗?
谢谢提前回答!
在 Validator::make
$validator = Validator::make($request->all(), $rules, $messages);
你不应该再指出它们
$validator->setCustomMessages($messages); // don't do that
注意
使用请求验证的更好方法是移动them to another file
重写和推荐的实现方式。 参考手册https://laravel.com/docs/5.5/validation#creating-form-requests
使用请求文件。
- 运行
php artisan make:request UpdateUserPasswordRequest
- 写入请求文件
2020 年 2 月编辑:在授权方法的最新版本 Laravel 中,可以使用全局 auth() 对象代替 \Auth,因此 \Auth::check() 将变为 auth()- >检查()。如果从框架中删除某些内容,两者仍然有效并会更新
<?php
namespace App\Http\Requests;
class UpdateUserPasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// only allow updates if the user is logged in
return \Auth::check();
// In laravel 8 use Auth::check()
// edit you can now replace this with return auth()->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'username' => 'required|max:255',
'oldpassword' => 'required|max:255',
'newpassword' => 'required|min:6|max:255|alpha_num',
'newpasswordagain' => 'required|same:newpassword',
];
}
/**
* Get the validation attributes that apply to the request.
*
* @return array
*/
public function attributes()
{
return [
'username' => trans('userpasschange.username'),
'oldpassword' => trans('userpasschange.oldpassword'),
'newpassword' => trans('userpasschange.newpassword'),
'newpasswordagain' => trans('userpasschange.newpasswordagain'),
];
}
/**
* Get the validation messages that apply to the request.
*
* @return array
*/
public function messages()
{
// use trans instead on Lang
return [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' =>Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
'username.max' => 'The :attribute field must have under 255 chars',
];
}
- 在用户控制器中
<?php namespace App\Http\Controllers; // VALIDATION: change the requests to match your own file names if you need form validation use App\Http\Requests\UpdateUserPasswordRequest as ChangePassRequest; //etc class UserCrudController extends Controller { public function chnagePassword(ChangePassRequest $request) { // save new pass since it passed validation if we got here } }
$messages = [
'username.required' => Lang::get('userpasschange.usernamerequired'),
'username.max' => Lang::get('userpasschange.usernamemax255'),
'oldpassword.required' => Lang::get('userpasschange.oldpasswordrequired'),
'oldpassword.max' => Lang::get('userpasschange.oldpasswordmax255'),
'newpassword.required' => Lang::get('userpasschange.newpasswordrequired'),
'newpassword.min' => Lang::get('userpasschange.newpasswordmin6'),
'newpassword.max' => Lang::get('userpasschange.newpasswordmax255'),
'newpassword.alpha_num' => Lang::get('userpasschange.newpasswordalpha_num'),
'newpasswordagain.required' => Lang::get('userpasschange.newpasswordagainrequired'),
'newpasswordagain.same:newpassword' => Lang::get('userpasschange.newpasswordagainsamenewpassword'),
];
尽量不要使用这个 :255 和 :6 结尾。
错误:
'username.max:255' => Lang::get('userpasschange.usernamemax255'),
正确:
'username.max' => Lang::get('userpasschange.usernamemax255'),
对于Laravel7.x,6.x,5.x
定义自定义规则后,您可以在控制器验证中使用它,例如:
$validatedData = $request->validate([
'f_name' => 'required|min:8',
'l_name' => 'required',
],
[
'f_name.required'=> 'Your First Name is Required', // custom message
'f_name.min'=> 'First Name Should be Minimum of 8 Character', // custom message
'l_name.required'=> 'Your Last Name is Required' // custom message
]
);
对于本地化,您可以使用:
['f_name.required'=> trans('user.your first name is required'],
希望这对您有所帮助...