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

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

当我进行ajax验证呼叫时,由于要在字段本身下方显示错误消息,因此我想使用其他消息.因此,无需再次显示字段名称(标签).

我知道您可以在’attributes’=>上定义标签[]但不值得付出努力,因为我有多种语言的众多领域.

我正在使用FormRequest(在Controller上没有手动调用,只是一个类型提示).

解决方法:

您可以覆盖特定请求(例如登录请求)的messages()方法.让我向您展示:首先,您需要创建一个新的自定义表单请求,这里我们将为email.custom规则定义一条自定义消息:

<?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']
        ];
    }
}

Only email.required rule message will be override. For password it will display the default message set at validation.php file.

现在,在您的控制器功能上应用表单请求,如类型提示:

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行:

public function messages(){
    return [
        'email.required' => trans('myPackage::validation.email.required'),
        'email.emial' => trans('myPackage::validation.email.valid'),
    ];
}
上一篇:如何整合Java中的有效性检查和异常抛出?


下一篇:php-Laravel:如何验证变量是数组还是匹配正则表达式的字符串