Laravel 5.1 - 自定义验证语言文件

时间:2015-08-29 20:34:03

标签: php validation laravel laravel-5.1

是否可以有条件地为验证请求设置自定义语言文件(例如resources/lang/en/validation_ajax.php)?为了清楚起见,我不想更改应用程序语言,只需根据请求来源使用另一组消息。

当我进行ajax验证调用时,我想使用不同的消息,因为我在字段本身下方显示错误消息。因此,无需再次显示字段名称(标签)。

我知道你可以在'attributes' => []上定义标签,但由于我有多种语言的字段,所以不值得付出努力。

我正在使用FormRequest(控制器上没有手动调用只是类型提示)。

1 个答案:

答案 0 :(得分:3)

您可以覆盖特定请求的messages()方法(比如登录请求)。让我告诉你:首先,你需要创建一个新的自定义表单请求,在这里我们将为email.required规则定义一个自定义消息:

<?php namespace App\MyPackage\Requests;

use App\Http\Requests\Request;

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文件中,那么您可以进行以下更改:

  1. 在您的包中创建自定义郎文件:

    MyPackage/resources/lang/en/validation.php
    
  2. 添加与project/resources/lang/en/validation.php文件保持相同数组结构的消息:

    <?php
    return [
        'email' => [
            'required' => 'how about the email?',
            'email' => 'how about the email format?',
        ],
    ];
    
  3. 最后,在您的messages()方法中分别调用包的lang行:

    public function messages(){
        return [
            'email.required' => trans('myPackage::validation.email.required'),
            'email.emial' => trans('myPackage::validation.email.valid'),
        ];
    }