有没有办法在Laravel 5验证规则中为输入名称添加别名?

pro*_*mer 6 php validation laravel laravel-5

我喜欢Laravel 5中的功能,让我将验证逻辑放入Laravel 5的Form Requests之一,然后Laravel将在我的控制器方法运行之前自动验证它.但是,缺少的一件事是"别名"输入名称的简单方法.

例如(为简单起见),假设我有一个名为"username"的输入字段的登录表单,但它实际上接受了一个电子邮件地址.我表格上的标签上写着电子邮件.如果出现错误,则错误将显示"需要用户名"之类的内容.这很令人困惑,因为我在我的表单上将该字段标记为电子邮件.

使用Laravel验证器时,混叠输入有什么好的解决方案?

到目前为止,我提出了两个想法:

解决方案1: 对每个规则使用Laravel的自定义错误消息

<?php namespace App\Http\Requests;

use App\Http\Requests\Request;

class AuthLoginRequest extends Request {

    public function rules()
    {
        return [
            'username' => 'required|email',
            'password' => 'required'
        ];
    }

    // This is redundant. And may have other pitfalls?
    public function messages()
    {
        return [
            'username.required' => 'email is required.',
            'username.email' => 'email is invalid.'
        ];
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:使用我自己的自定义表单类来处理将输入名称更改为其标签/别名(用户名变为电子邮件以进行验证),运行验证,然后将其更改回来.

小智 8

`

use App\Http\Requests\Request;

class AuthLoginRequest extends Request {

public function rules()
{
    return [
        'username' => 'required|email',
        'password' => 'required'
    ];
}

public function messages()
{
    return [
        'username.required' => ':attribute is required',
        'username.email' => ':attribute is invalid'
    ];
}

public function attributes()
{
    return[
        'username' => 'email', //This will replace any instance of 'username' in validation messages with 'email'
        //'anyinput' => 'Nice Name',
    ];

}
Run Code Online (Sandbox Code Playgroud)

}`

更新

我相信,:attribute在您的消息中,任何地方都将默认为您在表单中设置的名称,或者被上述方法覆盖attributes().(在:attribute http://laravel.com/docs/5.0/validation#custom-error-messages上)

脚注:我没有解释我是如何为我的表单做动态数组的,因为我正在以一种可能笨拙的方式迭代每个表单输入.我注意到我正在使用以下行来处理表单请求.我以为我会在这里提一下以防万一:

use Illuminate\Foundation\Http\FormRequest;
Run Code Online (Sandbox Code Playgroud)

如果这更有帮助,请告诉我!


Car*_*ter 4

您可以在文件 resources/lang/en/validation.php 中自定义验证输入名称,假设您使用 Laravel 5 并默认使用英语作为语言环境。

您可以找到一个名为“custom”的数组,只需在其中自定义您的输入名称和验证消息即可。

例如:

'custom' => array(
    'username' => array(
        'email' => 'Username is actually an email.'
    ),
)
Run Code Online (Sandbox Code Playgroud)

其中“用户名”是您输入的名称,“电子邮件”是内置规则的名称,“用户名实际上是电子邮件”是您想要告诉用户的任何内容。

希望这可以帮助!