是否可以有条件地为验证请求设置自定义语言文件(例如resources/lang/en/validation_ajax.php
) ?只是要清楚,我不想改变应用程序语言,只是根据请求来源使用另一组消息。
当我进行ajax验证调用时,我想使用不同的消息,因为我在字段本身下面显示错误消息。因此,不需要再次显示字段名(标签)。
我知道你可以在'attributes' => []
上定义标签,但这并不值得,因为我有这么多不同语言的字段。
我正在使用一个FormRequest(没有手动调用控制器只是一个类型提示)。
您可以针对特定请求(例如登录请求)重写messages()
方法。首先,您需要创建一个新的自定义表单请求,这里我们将为email.required
规则定义一个自定义消息:
<?php namespace AppMyPackageRequests;
use AppHttpRequestsRequest;
class LoginRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
public function messages()
{
return [
'email.required' => 'how about the email?',
];
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => ['required', 'email'],
'password' => ['required', 'confirmed']
];
}
}
现在,在你的控制器函数中应用表单请求,就像一个类型提示:只有
email.required
规则消息将被覆盖。对于密码,它将显示validation.php
文件中设置的默认消息。
class LoginController{
public function validateCredentials(LoginRequest $request){
// do tasks here if rules were success
}
}
就是这些。如果您需要创建自定义包并希望添加/编辑验证消息,那么messages()
方法非常有用。
如果你需要在包的lang文件中携带消息包,那么你可以做以下更改:
在您的包中创建您的自定义lang文件:
MyPackage/resources/lang/en/validation.php
添加与
project/resources/lang/en/validation.php
文件保持相同数组结构的消息:<?php return [ 'email' => [ 'required' => 'how about the email?', 'email' => 'how about the email format?', ], ];
最后,在
messages()
方法中分别调用包的lang's行:public function messages(){ return [ 'email.required' => trans('myPackage::validation.email.required'), 'email.emial' => trans('myPackage::validation.email.valid'), ]; }