Проверка массивов и передача значений полей между собой - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь проверить массив из входных данных моей формы. Мне нужно будет передать значение одного из моих полей в пользовательский класс Rule дополнительного поля формы в списке правил для этого дополнительного поля. Как это можно сделать?

Вот дальнейшее объяснение. После проверки field1 мне нужно передать это значение в класс CustomRule поля field2.

public function rules()
{
    return [
        'array' => ['array'],
        'array.*.field1'   => [
            'required',
            'integer',
            'min:1',
            'distinct',
        ],
        'array.*.field2' => [
            'required',
            'integer',
            'min:1',
            new CustomRule(),
        ],
    ];
}

1 Ответ

0 голосов
/ 04 июля 2018

Использование расширения проверки работало бы:

// register the rule in AppServiceProvider.php
Validator::extend('custom_rule', function ($attribute, $value, $parameters, $validator) {
    // field1 is accessible in $parameters. Add your custom validation logic here, for example:
    return $value < $parameters[0];
});

Затем передайте значение field1 правилу в качестве параметра:

public function rules()
{
    $rules = [
        'array' => ['array'],
        'array.*.field1'   => [
            'required',
            'integer',
            'min:1',
            'distinct',
        ]
    ];

    foreach ($this->array as $idx => $val) {
         $rules['array.' . $idx . '.field2'] = [
            'required',
            'integer',
            'min:1',
            'custom_rule:' . $val['field1'],    
         ];
    }

    return $rules;
}

Использование объекта правила:

class CustomRule implements Rule
{
    public $field1;

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

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return $value < $this->field1;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be less than field1.';
    }
}

// loop the array elements
foreach ($this->array as $idx => $val) {
    $rules['array.' . $idx . '.field2'] = [
        'required',
        'integer',
        'min:1',
        new CustomRule($val['field1']),    
     ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...