В фреймворке Yii2 неудобно сделана сериализация ошибок валидации.
Так как в формах обычно несколько полей ввода, то ошибки валидации выводятся в виде многомерного массива.
Поэтому, когда требуется склеить все ошибки в одну строку, приходится писать некрасивый код.
Когда это нужно?
Иногда для отладки, но чаще для логирования.
Например, вы не смогли сохранить модель в БД и желаете увидеть в логе, почему это произошло.
Решение
Я решил эту проблему так: написал класс ErrorSummary, который склеивает все ошибки валидации в одну строку.
<?php
namespace App\Helper;
use yii\base\Model;
/**
* Usage: $this->log('Order validation failed: ' . ErrorSummary::of($order));
*/
class ErrorSummary
{
public static function of(Model $model): string
{
$lines = [];
$errors = $model->getFirstErrors();
foreach ($errors as $es) {
$lines = array_merge($lines, (array)$es);
}
return implode("\n", $lines);
}
}
Результат
Теперь мне достаточно написать ErrorSummary::of($model)
чтобы вывести все ошибки.
По каждому из полей формы выводится только первая ошибка: я считаю, что так лучше.
Установка
Как и пакет Minimal Filesystem, весь код ErrorSummary умещается в один простой класс.
Поэтому его можно скопировать себе в проект “как есть”, либо установить через Composer.
Установка через Composer: composer require nex-otaku/yii2-error-summary