Stand alone validator вывод ошибки для определенного элемента в массиве?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Stand alone validator вывод ошибки для определенного элемента в массиве?

Сообщение za4me »

Добрый день.

Подскажите, пожалуйста, как в моем случае реализовать вывод ошибки рядом с невалидным полем?

Имею на входе из MultipleInput массив вида:
Изображение

В модели есть валидатор:

Код: Выделить всё

public function validateAccessories($attribute)
{
    $requiredValidator = new RequiredValidator();
    $numberValidator = new NumberValidator();

    foreach ($this->$attribute as $index => $row) {
        $error = null;
        $requiredValidator->validate($row['accessories_id'], $error);

        if ($error !== null) {
            $key = "{$attribute}[{$index}][accessories_id]";
            $this->addError($key, $error);
        }
    }
}
Отрабатывает от отлично, но понадобился аналогичная валидация для другой модели, вынес валидатор в отдельный класс:

Код: Выделить всё

use yii\validators\Validator;
use yii\validators\RequiredValidator;

class AccessoriesValidator extends Validator
{
    public function validateAttribute($model, $attribute)
    {
        $requiredValidator = new RequiredValidator();

        foreach ($model->$attribute as $index => $row) {
            $error = null;
            $requiredValidator->validate($row['accessories_id'], $error);

            if ($error !== null) {
                $this->addError($model, $attribute, 'Укажите комплектующее.');
            }
        }
    }
}
Валидатор отрабатывает, но как сделать вывод ошибки не на весь attribute, а только на определенный элемент массива?

Пробовал сделать так:

Код: Выделить всё

$this->addError($model, "{$attribute}[{$index}]['accessories_id]", 'Укажите комплектующее.');
Но получаю ошибку: "Getting unknown property: common\models\Dap::accessories[2]['accessories_id]"

Всем спасибо за помощь и советы.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Stand alone validator вывод ошибки для определенного элемента в массиве?

Сообщение futbolim »

Заводите своё поле, например $customErrors, ложите в него ошибки, считывайте.
Ответить