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