【问题标题】:Error implementing Custom Validation in Laravel在 Laravel 中实现自定义验证时出错
【发布时间】:2018-10-29 07:28:57
【问题描述】:

我正在尝试添加一个额外的验证规则来检查以确保用户名是一个单词。我创建了一个新规则(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;

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

【问题讨论】:

  • 能否分享一下错误信息?
  • 可能是您没有从function passes() 明确返回true。如果您不返回某些内容,则默认返回值为 null,这可能会被评估为 false。

标签: laravel


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2015-02-20
      • 2012-11-27
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多