Задать вопрос
proudmore
@proudmore

Модуль в yii2 рендерит общий layout приложения, как отрисовать без layout?

Здравствуйте. Есть модуль dektrium\yii2-user. Подключен так:
components:
'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
            'loginUrl' => '/user/security/login'

        ],
        'authManager' => [
            'class' => 'dektrium\rbac\components\DbManager'
        ],

modules:
'user' => [
            'class' => 'dektrium\user\Module',
            'controllerMap' => [
                'admin' => [
                    'class'  => 'dektrium\user\controllers\SecurityController',
                ],
            ],
            'modelMap'	=> [
                'User'		=> 'common\models\User',
            ],
            'admins' => ['admins'],
            'enablePasswordRecovery' => false,
            'enableRegistration' => false,
            'enableConfirmation' => false,
            'enableImpersonateUser' => false
        ],

В layout приложения у меня задействован код, получающий роли и права пользователя. Соответственно, когда пользователь не авторизован, вылетает исключение. Я хочу вообще отрубить рендеринг layout из actionLogin. Подскажите, как это сделать.
  • Вопрос задан
  • 424 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    public $layout = false;
    
    // ...
}

Или в конфиге модуля 'layout'=>false

Вроде бы как то так
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Проверяйте, авторизирован пользователь или нет.
if(!Yii::$app->user->isGuest){
   // тут Ваши действия с ролями
}

Или перенесите этот код, который работает с правами, из layout в контролер, например. Возможно ему там вообще не место. Чтобы сказать точно, надо видеть этот код и знать, что именно он выполняет и для чего нужен.
Я хочу вообще отрубить рендеринг layout из actionLogin

Это лишнее.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
В layout приложения у меня задействован код, получающий роли и права пользователя. Соответственно, когда пользователь не авторизован, вылетает исключение.

Это говорит о том что этому коду не место в layout. Та что лучше прислушаться к slo_nik и вынести его от туда куда-нибудь. А вообще в Вашем случае layout можно отключить так
'user' => [
    'class' => 'dektrium\user\Module',
    'controllerMap' => [
        'admin' => [
            'class'  => 'dektrium\user\controllers\SecurityController',
            'layout' => false
        ],
    ],
    'modelMap' => [
         'User' => 'common\models\User',
     ],
    'admins' => ['admins'],
    'enablePasswordRecovery' => false,
    'enableRegistration' => false,
    'enableConfirmation' => false,
    'enableImpersonateUser' => false
],
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы