提问者:小点点

是否有办法在Laravel 5验证规则中别名输入名称?


我喜欢Laravel 5中的功能,让我将验证逻辑放入Laravel 5的一个表单请求中,然后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.'
        ];
    }

    ...
}

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


共3个答案

匿名用户

'

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()方法覆盖。(关于:属性http://laravel.com/docs/5.0/validation#custom-错误消息)

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

use Illuminate\Foundation\Http\FormRequest;

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

匿名用户

您可以在文件resources/lang/en/validation中自定义验证输入名称。php,假设您使用的是Laravel5,默认情况下使用英语作为区域设置语言。

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

例如:

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

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

希望这有帮助!

匿名用户

打开文件resources/lang/en/validation。php,其中en是应用程序的默认语言。如果你在用英语,那就麻烦你了。在文件底部,按如下方式更新属性数组:

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

添加其他属性名称和相应的错误标签。它会达到你想要的效果。