有没有办法在 Laravel 5 验证的规则中别名输入名称


Is there a way to alias input names in the rules for Laravel 5 validation?

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

例如(为简单起见),假设我有一个登录表单,其中包含一个名为"用户名"的输入字段,但它实际上接受一个电子邮件地址。我的表单上的标签显示电子邮件。如果出现错误,错误将显示"用户名是必需的"。这很令人困惑,因为我在表单上将该字段标记为电子邮件

使用 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.'
        ];
    }
    ...
}

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

'

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

}'

更新

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

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

use Illuminate'Foundation'Http'FormRequest;

让我知道这是否更有帮助!

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

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

例如:

'custom' => array(
    'username' => array(
        'email' => 'Username is actually an email.'
    ),
)
其中"用户名"是

你的输入名称,"电子邮件"是内置规则的名称,"用户名实际上是电子邮件"是你想告诉用户的任何内容。

希望这有帮助!

打开文件 resources/lang/en/validation.php,其中 en 是应用程序的默认语言。在文件底部,更新属性数组,如下所示:

'attributes' => array( 'password' => 'Password', 'email' => 'Email Address', ),

添加其他属性名称和相应的错误标签。它会做你想要的把戏。

使用这个:

$validator = Validator::make($data, [
    'username' => 'required|string', // Your field validation
])
->setAttributeNames(
    ['username' => '"Username"'], // Your field name and alias
);