在视图中显示 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");