如何在两个输入字段中仅设置一个NULLABLE

时间:2019-06-07 10:49:53

标签: laravel

我有两个输入字段,一个为mobile_no,另一个为电子邮件,我想设置一个条件,如果未提供mobile_no,则必须在两个字段中输入电子邮件,反之亦然。

如何在laravel验证中设置可以为空的条件,即必须只需要两个字段中的一个。

1 个答案:

答案 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')) ]
]);

我希望至少它能为您指明方向,除非这种确切的实现方式不符合您的需求。