我有两个输入字段,一个为mobile_no,另一个为电子邮件,我想设置一个条件,如果未提供mobile_no,则必须在两个字段中输入电子邮件,反之亦然。
如何在laravel验证中设置可以为空的条件,即必须只需要两个字段中的一个。
答案 0 :(得分:0)
您可以创建自定义规则。因此,您的需求与required_if
规则相反。因此,请尝试使用此规则,并告诉我。
首先创建自定义规则,我称之为NullableIf
php artisan make:rule NullableIf
然后实现应如下所示:
class NullableIf implements Rule
{
private $otherField;
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct( $otherField )
{
$this->otherField = $otherField;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
if($this->otherField === null)
{
return $value !== null;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The validation error message.';
}
}
要使用它,请执行以下操作:
$request->validate([
'field1' => [ new NullableIf(request('field2')) ],
'field2' => [ new NullableIf(request('field1')) ]
]);
我希望至少它能为您指明方向,除非这种确切的实现方式不符合您的需求。