Теперь создаем страницу 404 Not Found для панели управления. Yii2 не поддерживает отдельную от приложения обработку ошибок в модулях, обработчик ошибок является глобальным. Поэтому нужно перезаписать компонент errorHandler
в классе модуля, установить его для приложения и зарегистрировать как обработчик ошибок.
<?php namespace app\modules\admin; use Yii; use yii\web\ErrorHandler; class Module extends \yii\base\Module { public $controllerNamespace = 'app\modules\admin\controllers'; public function init() { parent::init(); Yii::configure($this, [ 'components' => [ 'errorHandler' => [ 'class' => ErrorHandler::class, 'errorAction' => 'admin/admin/error' ] ], ]); $handler = $this->get('errorHandler'); Yii::$app->set('errorHandler', $handler); $handler->register(); } }Копировать
Добавляем метод actions()
в класс контроллера AdminController
:
<?php namespace app\modules\admin\controllers; use Yii; use yii\web\Controller; class AdminController extends Controller { public function beforeAction($action) { $session = Yii::$app->session; $session->open(); if (!$session->has('auth_site_admin')) { $this->redirect('/admin/auth/login'); return false; } return parent::beforeAction($action); } public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], ]; } }Копировать
И создаем view-шаблон:
<?php /* * Файл modules/admin/views/admin/error.php */ /* @var $this yii\web\View */ /* @var $name string */ /* @var $message string */ /* @var $exception Exception */ use yii\helpers\Html; $this->title = $name; ?> <h1><?= Html::encode($this->title) ?></h1> <div class="alert alert-danger"> <?= nl2br(Html::encode($message)) ?> </div>Копировать
Источник:
Перейти