Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
ge74d8
Сообщения: 40
Зарегистрирован: 2019.03.11, 16:41

Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все?

Сообщение ge74d8 »

Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все?

Вот в этом месте

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

<?= $form->field($model, 'field')->fileInput() ?>
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все

Сообщение Drugpunker »

Если все сразу, то можно во вьюхе добавить:

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

<?= $form->errorSummary($model); ?>
Но лучше как посоветовали выше.
Должны быть отработаны все, верно указанные рулз. По очереди. И ошибки будут выводиться где нужно, также по очереди.
ge74d8
Сообщения: 40
Зарегистрирован: 2019.03.11, 16:41

Re: Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все

Сообщение ge74d8 »

Drugpunker писал(а): 2020.09.07, 21:59 Если все сразу, то можно во вьюхе добавить:

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

<?= $form->errorSummary($model); ?>
Но лучше как посоветовали выше.
Должны быть отработаны все, верно указанные рулз. По очереди. И ошибки будут выводиться где нужно, также по очереди.
Таким образом выводятся по одной первой ошибке для каждого атрибута модели, если нужно вывести все ошибки для конкретного атрибута, то это можно сделать так, подскажите если есть более элегантное решение.

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

<?= $form->field($model, 'file')->begin(); ?>
    <?= Html::activeLabel($model,'file');  ?>
    <?= Html::activeFileInput($model, 'file'); ?>
    <?= Html::error($model,'file', [
        'class' => 'help-block',
        'encode' => false,
        'errorSource' => function($model, $attribute) {
            $result = '';
            foreach ($model->getErrors($attribute) as $key => $error) {
                $result .= Html::beginTag('div') . $error . Html::endTag('div');
            }
            return $result; 
        }
    ]); ?>
<?= $form->field($model, 'file')->end(); ?>
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все

Сообщение unknownby »

ge74d8 писал(а): 2021.02.13, 16:09 Таким образом выводятся по одной первой ошибке для каждого атрибута модели, если нужно вывести все ошибки для конкретного атрибута, то это можно сделать так, подскажите если есть более элегантное решение.
А зачем пользователю видеть все ошибки сразу? А не конкретную, которую он допустил.
В вашем случае загрузка файла.
Поле может быть во-1 обязательное, во-2 файл должен иметь определенный формат данных, в-3 определенный размер.
Вторую и третью ошибку можно минимизировать, написав в названии поля тип и размер, для тупых :)
"Добавьте скан паспорта (формат файла .pdf, максимальный размер 10Мб)"
Взяв пример целого числа и обязательного поля.
1 - вывод ошибки, если пользователь не ввёл ничего в поле
2 - вывод ошибки, если пользователь ввёл не правильные данные (буквы или дробное число)
И всё регулируется через rules.

Решение за вами, какая логика должна быть в проекте ;)
ge74d8
Сообщения: 40
Зарегистрирован: 2019.03.11, 16:41

Re: Если добавить в Model несколько ошибок через метод addError(), ActiveForm выводит только одну, можно ли вывести все

Сообщение ge74d8 »

Это нужно для того что файл внутри себя тоже содержит структуру (csv), внутри этой структуры есть требования к полям, к их формату, пользователю нужно сказать все места где формат неправильный (строка 1, поле такое-то и тд), он должен все исправить и загрузить повторно уже в правильном формате.
Ответить