在视图中显示 Yii2 HttpException 消息
Display Yii2 HttpException Message in View
我尝试在 Yii2 中处理 HttpExceptions 以向 Web 用户显示错误消息。我在这里设置所有内容: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);
}
也许你可以尝试添加额外的内容并像这样在 Yii2 错误消息中扩展异常。
只需创建一个名为 ErrorMsg.php
的新自定义 php 文件
<?php
use Yii;
use yii\web\HttpException;
class ErrorMsg extends \Exception
{
public static function customErrorMsg($error_code,$message = null, $code = 0, \Exception $previous = null,$extra_content=NULL)
{
$httpException = new HttpException($error_code,$message,$code,$previous);
Yii::$app->response->statusCode = $error_code;
$custom_err = array(
'name'=> $httpException->getName(),
'message' => $message,
'code' => $code,
'extraContent' => $content,
'status' => $error_code,
'type' => "\utilities\ErrorMsg"
);
return $custom_err;
}
并在任何你想要的地方调用函数。例子
return ErrorMsg::customErrorMsg(400,"Message Here",11,NULL,"Extra Content Here");
我尝试在 Yii2 中处理 HttpExceptions 以向 Web 用户显示错误消息。我在这里设置所有内容: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);
}
也许你可以尝试添加额外的内容并像这样在 Yii2 错误消息中扩展异常。 只需创建一个名为 ErrorMsg.php
的新自定义 php 文件<?php
use Yii;
use yii\web\HttpException;
class ErrorMsg extends \Exception
{
public static function customErrorMsg($error_code,$message = null, $code = 0, \Exception $previous = null,$extra_content=NULL)
{
$httpException = new HttpException($error_code,$message,$code,$previous);
Yii::$app->response->statusCode = $error_code;
$custom_err = array(
'name'=> $httpException->getName(),
'message' => $message,
'code' => $code,
'extraContent' => $content,
'status' => $error_code,
'type' => "\utilities\ErrorMsg"
);
return $custom_err;
}
并在任何你想要的地方调用函数。例子
return ErrorMsg::customErrorMsg(400,"Message Here",11,NULL,"Extra Content Here");