首页 > 解决方案 > 如何在两个输入字段中只设置一个 NULLABLE

问题描述

我有两个输入字段,一个是 mobile_no,另一个是电子邮件,我想设置一个条件,如果没有给他们 email,则必须在两个字段中设置一个条件,反之亦然。

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

标签: laravel

解决方案


您可以创建自定义规则。所以你的需求与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')) ]
]);

我希望至少它能给你指明方向,除非这个确切的实现不适合你的需要。


推荐阅读