За обработку ошибок отвечает компонент приложения ErrorHandler, а за рендер самой страницы ошибки экшен указанный в параметре errorAction компонента. Соответственно при рендере страницы ошибки используется слой указанный в контроллере на который ссылается errorAction. Поэтому в самом простом варианте решения Вы можете определять слой в этом месте.
Например:
Конфигурация приложения:
// ...
'components' => [
// ...
'errorHandler' => [
'errorAction' => 'site/error',
],
]
Контроллер
namespace app\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
public function beforeAction($action)
{
if ($action == 'error' && Yii->app->user->isGuest) {
$this->layout = '@app/modules/backend/views/layouts/main';
}
return parent::beforeAction($action);
}
}
но повторюсь это самый простой вариант из множества