Здравствуйте товарищи программисты.
---
Не так страшен код, как его трактуют ))
Подсказку к этому вопросу как ни странно, я нашёл в папке
"views/site/"
Файл:
error.php
===
Разработчики поняли, что программисты столкнуться с таким вопросом, поэтому оставили подсказки:
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
$this->title = $name;
?>
Из них мы видим, что переменную
<?=$name?>
нам даёт
<?=$this->title;?>
А свалился этот нейм на наши головы из класса View !
Проведя рефакторинг, я понял, что за
<?=$message;?>
Отвечает языковой пакет Yii2/
А именно.
/vendor/yiisoft/yii2/messages/ru/
Если конечно вы в конфиге файла main.php указали русский язык. Там их куча, вы можете в этом убедится, да и сам класс показал, что используется модель подставки сообщений, через конструкцию:
<?=Yii::t('yii','значение');?>
Вы спросите, а нахера такой геморрой нужен??
Отвечаю, во-первых, это не геморрой, а очень даже классное решение! Убивает сразу двух зайцев наповал! Мультиязычность - раз, Повторяющиеся элементы - два! Благодаря такому решению не надо ковырять весь код, достаточно заменяющие элементы заменить такой конструкцией, и всё, поменял текст или дизайн кнопки "обновить", сделал это в одном месте, в файле yii.php и всё, дизайн и текст поменялся во всём сайте, а отредактировали один файл!!! Это невероятно удобно. Так и с ошибками и с сообщениями, зачем писать на каждой страничке ручками "ваше сообщение успешно отправлено", если можно прописать значение = перевод. Так вот, в голове кода была ещё одна подсказка
/* @var $exception Exception */
и в самом классе ссылка на мануал php7 -
php.net/manual/ru/exception.getmessage.php
Таким образом мы имеем:
class HttpException extends UserException
{
/**
* @var int HTTP status code, such as 403, 404, 500, etc.
*/
public $statusCode;
/**
* Constructor.
* @param int $status HTTP status code, such as 404, 500, etc.
* @param string $message error message
* @param int $code error code
* @param \Exception $previous The previous exception used for the exception chaining.
*/
public function __construct($status, $message = null, $code = 0, \Exception $previous = null)
{
$this->statusCode = $status;
parent::__construct($message, $code, $previous);
}
/**
* @return string the user-friendly name of this exception
*/
public function getName()
{
if (isset(Response::$httpStatuses[$this->statusCode])) {
return Response::$httpStatuses[$this->statusCode];
} else {
return 'Error';
}
}
}
Ну так, раз мы можем указать код ошибки,
public $statusCode;
То можно тупо и условия поставить, например:
<?=($exception->statusCode == '404') ? $this->title = "Ошибка 404" : ''; ?>
<?=($exception->statusCode == '403') ? $this->title = "Доступ запрещён" : ''; ?>
<?=($exception->statusCode == '500') ? $this->title = "Внутренняя ошибка сервера" : ''; ?>
А текст ошибки под заголовком редактируется в языковом пакете:
/vendor/yiisoft/yii2/messages/ru/yii.php
$message
<?php
return [
...
'Page not found.' => 'Страница не найдена.',
'You are not allowed to perform this action.' => 'Вам не разрешено производить данное действие.',
'An internal server error occurred.' => 'Возникла внутренняя ошибка сервера.',
...
];
Выводится как
<?=Yii::t('yii', 'Page not found.');?> и т д...
Но вам выводить ничего не надо, класс сам определит код ошибки и выведет её текст.
Как заменить заголовок ошибки я уже написал выше.
--
Это был полный разбор страницы ошибок, благодарю всех за внимание. Пока :)