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

时间:2015-03-11 00:57:22

标签: php validation laravel laravel-5

我喜欢Laravel 5中的功能,让我将验证逻辑放入Laravel 5的表单请求之一,然后运行Laravel will automatically validate it just before我的控制器方法。然而,缺少的一件事就是一种简单的方法,即#34;别名"输入名称。

例如(为了简单起见),假设我有一个带有输入字段的登录表单" 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.'
        ];
    }

    ...
}

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

4 个答案:

答案 0 :(得分: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',
    ];

}

}`

已更新

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

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

use Illuminate\Foundation\Http\FormRequest;

让我知道这是否更有用!

答案 1 :(得分:4)

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

你可以找到一个名为'custom'的数组,只需在那里自定义输入名称和验证消息。

例如:

'custom' => array(
    'username' => array(
        'email' => 'Username is actually an email.'
    ),
)

其中'username'是您的输入名称,'email'是内置规则的名称,'Username实际上是一封电子邮件'是您要告诉用户的任何内容。

希望这有帮助!

答案 2 :(得分:2)

打开文件resources / lang / en / validation.php,其中en是应用程序的默认语言。如果您使用英语,请使用。在文件的底部,按以下方式更新attributes数组:

var source = (from item in baseSource

                          where item.Version > 0 
                          where item.Published                           
                          where db.abcTest.Where(it => it.Published && it.Name == item.Name).Max(it => it.Version) == item.Version

                          orderby item.Name, item.Version descending
                          group item by new { item.Name, item.Version} into groupx
                          select new
                          {          
                                PK = groupx.FirstOrDefault().PK,
                                groupx.Key.Name,
                                groupx.Key.Version,
                                abc= groupx.Select(it => it.abc.Count()).FirstOrDefault()
                          }
                          ).ToList();
            return source;

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

答案 3 :(得分:0)

使用此:

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