我有一个具有 rbac 角色的网站,当我因无法访问某些页面而出现错误时,我会收到带有错误的白页。
使用这些代码进行布局,但不起作用:
我的站点控制:
public function actionError()
{
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
$this->layout = 'main';
return $this->render('error', ['exception' => $exception]);
}
}
我在站点控制器中有这个功能,我认为这个有问题:
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
main.php:
'errorHandler' => [
'errorAction' => 'site/error',
],
错误。 php查看页面
<?php
use yii\helpers\Html;
$this->title = $name;
?>
<div class="site-error">
<h1><?= Html::encode($this->title) ?></h1>
<div class="alert alert-danger">
<?= nl2br(Html::encode($message)) ?>
</div>
<p>
The above error occurred while the Web server was processing your request.
</p>
<p>
Please contact us if you think this is a server error. Thank you.
</p>
我用其他错误测试我的网络,我知道其他错误确实显示在我的视图布局中,但只是访问错误不在布局中
在像您的站点控制器中的方法actionError()这样的设置中,永远不会调用,因为您在方法actions()中声明了错误,请注释以下行:
'error' => [
'class' => 'yii\web\ErrorAction',
],
在您的站点控制器中,您应该看到错误,查看您的视图,您必须传递名称和消息属性的值,如下所示:
public function actionError() {
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
$this->layout = 'main';
return $this->render('error', ['name' => $exception->getCode(), 'message' => $exception->getMessage()]);
}
}
当然,站点/错误必须在浏览器中可用(根据需要在控制器中设置规则和文件系统上的路径)。