在视图中显示Yii2 HttpException消息

时间:2016-12-28 14:58:46

标签: php yii2 httpexception

我尝试在Yii2中处理HttpExceptions以显示Webusers的错误消息。我像这里一样设置所有内容: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!");

我希望在我的视图文件中显示文本,或者至少在文档中描述的vars中显示文本 - 但是变量文件是保护的或私有的。任何想法如何做到这一点?

查看

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

4 个答案:

答案 0 :(得分:2)

首先,您需要两次定义error操作,一次作为siteController的方法,其次是actions方法。 您可以使用' $ message'来检索您的错误消息。视图文件中的变量,使用$exception->message不正确。 Yii文档允许在错误视图文件中使用这些变量;

  • 名称
  • 消息
  • 例外

答案 1 :(得分:1)

不确定你是否检查了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>

答案 2 :(得分:0)

试试这个

  $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);


    }

答案 3 :(得分:0)

也许您可以尝试添加额外的内容并像这样在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");