Есть задача показывать разные шаблоны страницы ошибок для разных контролеров.
Знаю, что можно переопределить в конфигурационном файле, можно через init() контроелера.
Но вот тут я не могу сообразить как правильно сделать.
Структура проекта следующая(yii2-basic).
Код: Выделить всё
controllers
admin
users
UsersController
countries
CountriesController
AdminController
DefaultController
SiteController
views
admin
users
countries
default
error.php
index.php
site
index.php
error.php
Код: Выделить всё
<?php
class AdminController extends Controller
{
public function init()
{
parent::init();
$this->layout = 'admin/main.php';
Yii::$app->view->getAssetManager()->bundles = [];
Yii::$app->errorHandler->errorAction = 'admin/default/error';
Yii::$app->user->loginUrl = ['/admin/login'];
Yii::$app->errorHandler->errorView = '@app/views/admin/default/error';
}
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
// 'view' => '@app/views/admin/default/error'
]
];
}
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'except' => ['login'],
'rules' => [
[
'allow' => true,
'roles' => ['@']
]
]
]
];
}
}
Проблема в следующем.
Я перехожу в админку по localhost/admin.
Если я намеренно делаю ошибку в адресе, например, localhost/admin/use2rs, то меня перекидывает на site/error, вроде бы всё правильно, страницы use2rs у меня не существует. Если делаю ошибку, вызов несуществующей записи localhost/admin/user/view/09, то меня перекидывает туда, куда я хочу - на admin/error.
Как сделать так, чтобы при переходе на несуществующую страницу в админе перекидывало не на site/error, а на admin/error?