В фреймворке 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

GitHub: https://github.com/Nex-Otaku/yii2-error-summary