【问题标题】:How to custom validation with input value as name already been taken?如何使用输入值作为名称进行自定义验证?
【发布时间】:2020-04-12 17:49:37
【问题描述】:

在控制器中

public function store(Request $req)
{
    $req->validate([
    'username' => 'required|unique:users',
    ]);

    $users = new Users();
    $users->username = $req->username;
    $users->save();        
    return redirect()->route('list.users');
}

用户名验证返回为The username has already been taken.

我将用户名字段输入为 JHON,我将返回验证,如下所示:The JHON has already been taken.?

【问题讨论】:

    标签: laravel laravel-7 laravel-6.2


    【解决方案1】:

    我相信您可以在定义自定义验证消息时使用:input

    public function store(Request $req)
    {
        Validator::make($req, [
            'username' => 'required|unique:users',
        ], [
            'unique' => 'The :input username has already been taken.',
        ]);
    
        $users = new Users();
        $users->username = $req->username;
        $users->save();        
        return redirect()->route('list.users');
    }
    

    【讨论】:

    • 感谢您的快速支持。
    【解决方案2】:

    为了让你的代码更简洁,你应该改变“唯一”验证错误的本地化

    转到文件“resources/lang/en/validation.php”(或使用您的语言的 iso 代码更改“en”部分)并更改“unique”值。

    发件人:

    'unique' => 'The :attribute has already been taken.',
    

    收件人:

    'unique' => 'The :attribute :input has already been taken.',
    

    这样,您应该会收到以下消息

    用户名 JHON 已被占用。

    【讨论】:

    • 好答案。怎么会这样? :placeholder :input 已被占用。因为我的属性 name="name" 和我的 placeholder="User Name",所以想 用户名 JHON 已经被占用了。
    • 在这种情况下,最简单的解决方案是将“名称”重命名为“用户名”。占位符未发送到 php。
    【解决方案3】:
    $req->validate([
        'username' => 'required|unique:users,username',
        ]);
    

    这是使用 unique 的语法:

    unique:table,column

    https://laravel.com/docs/7.x/validation#rule-unique

    【讨论】:

    • 我相信OP的问题是如何使用用户在消息中的输入来修改错误消息。在这种情况下,用户输入的用户名。如果列名等于正在验证的属性,您可以使用唯一验证规则而不指定列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2019-01-29
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多