Laravel验证多个独家要求

时间:2018-01-31 11:55:28

标签: php validation laravel-5.5

我正在使用Laravel 5.5,而我正在尝试进行一些复杂的现场验证,而我似乎无法为此找到解决方案。

我有三个字段:

  

field_a(布尔)
  field_b(字符串)
  field_c(字符串)

我需要验证,如果field_a 为真,则field_bfield_c 不为空

我试图做类似的事情:

'field_b' => 'required_with:field_a|required_if:field_c,',
'field_c' => 'required_with:field_a|required_if:field_b,',

但是,如果已将field_a传递给请求,则这种方式需要两个字段。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我无法使用Laravel的内置验证系统来进行此类验证,因此我创建了自己的自定义规则。我把它留在这里以防有人发现它有用。

class IfXOR implements Rule {
    private $required;
    private $fields;
    /**
    * Create a new rule instance.
    *
    * @param bool $required
    * @param mixed $fields
    * @return void
    */
    public function __construct($required, $fields) {
        $this->required = $required;
        $this->fields = $fields;
    }

    /**
    * Determine if the validation rule passes.
    *
    * @param  string  $attribute
    * @param  mixed  $value
    * @return bool
    */
    public function passes($attribute, $value) {
        if(!$this->required) return true;
        if(!is_array($this->fields)) return $value || !empty($this->fields);
        return $value || !empty(array_filter(function($f) { return !empty($f); }, $this->fields));
    }

    /**
    * Get the validation error message.
    *
    * @return string
    */
    public function message() {
        return 'The validation error message.';
    }
}