php 在视图中显示Yii2 HttpException消息

q3aa0525  于 2022-11-28  发布在  PHP
关注(0)|答案(5)|浏览(154)

我试着在Yii 2中处理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!");

我想在我的视图文件中显示文本或至少在文档中描述的变量-但所有变量都是受保护的或私有的。有什么想法如何做到这一点?
检视

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

3ks5zfa01#

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

  • 姓名
  • 讯息
  • 例外情况
mzaanser

mzaanser2#

试试这个

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

    }
l7wslrjt

l7wslrjt3#

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

fykwrbwg4#

也许你可以尝试添加额外的内容,扩展Yii2错误信息中的异常,就像这样。创建一个新的自定义php文件,名为ErrorMsg.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");
nwsw7zdq

nwsw7zdq5#

如果你想直接从异常类中得到异常消息(Any of it,例如NotFoundException),你会发现Exception::$message是受保护的属性,但是它有Exception::getMessage()的公共方法,所以在你的错误视图中,只需调用它。

<p class="message"><?= $exception->getMessage() ?></p>

相关问题