Отображение сообщения об исключении Yii2 HttpException

Я пытаюсь обработать исключения Http в Yii2 для отображения сообщений об ошибках для веб-пользователей. Я настраиваю все как здесь: http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html

контроллер

namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
}

public function actionError()
{
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
return $this->render('error', ['exception' => $exception]);
}
}

Когда я выбрасываю ошибку, как это:

throw new HttpException(404,"This is an error. Maybe Page not found!");

Я хочу отобразить текст в моем файле просмотра или, по крайней мере, в переменных, описанных в Документах, — но все они защищены или являются частными. Есть идеи, как это сделать?

Посмотреть

$exception->statusCode // works
$exception->message    // proteced

0

Решение

Во-первых, вы определяете error действие дважды, один раз как метод вашего siteController, а второй в actions метод.
Ваше сообщение об ошибке можно получить с помощью переменной $ message в вашем файле просмотра, используя $exception->message не является правильным.
Документация по Yii учитывает эти переменные в вашем файле просмотра ошибок;

  • название
  • сообщение
  • исключение
2

Другие решения

Не уверен, если вы отметили просмотр файла в views\site\error.php Мне потребовалось время, чтобы понять себя, это используется для отображения страниц с ошибками.

<?php

/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */

use yii\helpers\Html;

$this->title = $name;
?>
<div class="site-error">

<h1><?= Html::encode($this->title) ?></h1>

<div class="alert alert-danger">
<?php /* this is message you set in `HttpException` */ ?>
<?= nl2br(Html::encode($message)) ?>
</div>

<p>
<?= Yii::t('app', 'Here is text that is displayed on all error pages') ?>
</p>

</div>
1

Попробуй это

  $connection = \Yii::$app->db;
$transaction = $connection->beginTransaction();

try {
$model->save()
$transaction->commit();
return $this->redirect(['user/view', 'id' => $model->id]);

}catch (\Exception $e) {

$transaction->rollBack();
throw new \yii\web\HttpException(500,"YOUR MESSAGE", 405);}
0
По вопросам рекламы [email protected]