使用多值评估在Laravel中require_if相反

时间:2019-05-17 06:23:38

标签: laravel

如果另一个字段具有特定值或不为空

,如何验证必须为空

在我的情况下,它与具有多个值的required_if相反

$rule = array(
  'selection' => 'required',
  'stext' => 'required_if:selection,2|required_if:selection,3',// stext should be null if selection is 2 or 3 
);

如果需要,如何执行自己的验证?

2 个答案:

答案 0 :(得分:1)

因此在您的示例中,您可以执行以下操作:

$rule = array(
  'selection' => 'required',
  'stext' => 'required'
);

// override the rule
if(in_array(request('selection'), [2, 3])) 
{
  $rule['stext'] = 'nullable';
}

这意味着如果选择为2,则将需要该字段,如果selection字段具有任何其他值,则将需要stext字段。

我不确定我是否正确理解了您的问题。在任何情况下,required_if的反义词都是required_without,因此即使选择为空,如果希望此字段也是必需的,则可以使用该值。

使用自定义规则,passs方法应如下所示:


namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CustomRule implements Rule
{

    protected $selection;

    public __construct($selection)
    {
        $this->selection = $selection;
    }

    public function passes($attribute, $value)
    {
        return $value === null && in_array($this->selection, [2, 3]);
    }
}

您可以这样使用它:

$rule['stext'] = [ new CustomRule(request('selection') ]

答案 1 :(得分:0)

我尝试扩展验证规则。将以下内容放入 AppServiceProvider

Validator::extend('null_if', function ($attribute, $value, $parameters, $validator) {
    $other = $parameters[0];
    $other_value = array_get(request()->toArray(), $other);
    if ($parameters[1] == $other_value) {
        return empty($value);
    }
    return true;
});

告诉我它是否有效或给您什么错误。