在Laravel中实现自定义验证时出错

时间:2018-10-28 21:58:28

标签: laravel

我正在尝试添加一个额外的验证规则,以检查以确保用户名是单词。我这样创建了一个新规则(SingleWord):

public function passes($attribute, $value)
    { 
        $dd =  strpos(trim($value), ' ');
        if($dd !== false){
            return false;
        }
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Username must be one word';
    }

我现在将此规则添加到验证器中,如下所示:

 $validator =  Validator::make($data, [
            'name' => 'required|string|max:255|unique:merchants',
            'email' => 'required|string|email|max:255|unique:merchants',
            'password' => 'required|string|min:6',
            'username' => 'required|string|unique:merchants',
            'username' => [new SingleWord]
        ],[
            'name.required' => "Company name is required",
        ]);
        return $validator;

但是,即使我输入一个单词,验证器也会返回错误消息。请问这里可能有什么问题吗?

2 个答案:

答案 0 :(得分:2)

您忽略了肯定的情况。试试这个:

public function passes($attribute, $value)
    { 
        $dd =  strpos(trim($value), ' ');
        if($dd !== false){
            return false;
        }
        return true; 
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Username must be one word';
    }

答案 1 :(得分:1)

在不知道您的错误消息的情况下,我将建议您进行一些更改,首先在验证中,您可以将passes方法更改为此:

public function passes($attribute, $value)
{ 
    return !strpos(trim($value), ' ');
}

然后进行验证,您只能使用这样的一个键:

'username' => ['required', 'string', 'unique:merchants' , new SingleWord]