我尝试在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
答案 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");