如果另一个字段具有特定值或不为空
,如何验证必须为空在我的情况下,它与具有多个值的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
);
如果需要,如何执行自己的验证?
答案 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;
});
告诉我它是否有效或给您什么错误。