Laravel 5.6:将不同的表单字段值传递到另一个字段的验证中

时间:2019-04-05 16:00:59

标签: laravel validation

我正在编写自定义验证规则。在我的表单中,我使用带有名为“ my-event”的验证组的规则来验证字段。我的规则之一是,如果选中名为“其他”的复选框,则需要填写文本字段“其他”。

我的请求已通过以下规则验证:

EventRequest.php

 public function rules()
    {
        return [
            'my-event.event-types' => 'required'
            'my-event.event-type-other' => [
                'string', new CheckboxIsValid($checkboxArray)
            ],
        ];
    }

CheckboxIsValid是我编写的用于实现Laravel规则的帮助程序类:

class CheckboxIsValid implements Rule
{

    public $checkboxArray;

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

    public function passes($attribute, $value)
    {
        if(in_array('other', $this->checkboxArray)) {
            if($value) {
                return true;
            }
        }
        return false;
    }

}

这将检查我的已选中复选框数组中是否包含“ other”。我想传递my-event.event-types的值。我该怎么做?

1 个答案:

答案 0 :(得分:0)

EventRequest.php扩展了FormRequest,后者扩展了Request,这将允许访问其他表单字段值:

$this->validationData()

我已经在EventRequest.php中访问了它,如下所示:

// Instantiate it in case form is submitted without any event types

$eventTypes = [];

if(isset($this->validationData()['my-event']['event-types'])){
            $eventTypes = $this->validationData()['my-event']['event-types'];
        }

然后可以将其传递给我的规则:

 'my-event.event-types-other' => [
            new CheckboxIsValid($teachingMethods, 'other')
        ],

在CheckboxIsValid的构造函数中:

public $checkboxArray;
public $field;

public function __construct($checkboxArray, $field)
{
    $this->checkboxArray = $checkboxArray;
    $this->field = $field;
}