Module не обрабатывает behaviors() почему?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
leonenco
Сообщения: 101
Зарегистрирован: 2017.01.30, 22:42

Module не обрабатывает behaviors() почему?

Сообщение leonenco » 2019.06.23, 01:40

Привет всем, столкнулся с такой проблемой: Модуль не обрабатывает behaviors(). Я создал несколько модулей, блог продукты корзина, чекаут, заказы. на первых 3-х, ActionFilter и мой кастомный бехавиор работают как должно, на последних двух не обрабатывает и ActionFilter и мой бехавиор. В чем может быть проблема? могу привести пример от работаюших и нет. Чесно говоря код практически тот же. Регестрирую все компоненты в main-params.php.

Модуль корзина, работает как надо:

Код: Выделить всё

<?php

namespace frontend\modules\cart;

use yii\filters\AccessControl;
use common\filters\UserCompanyAccessFilter;

/**
 * cart module definition class
 */
class Cart extends \yii\base\Module
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'userHasCompany' => [
                'class' => UserCompanyAccessFilter::className(),
            ],
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                      'allow' => true,
                      'roles' => ['userAccess'],
                    ]
                ],
            ],            
        ];
    }
    
    /**
     * {@inheritdoc}
     */
    public $controllerNamespace = 'frontend\modules\cart\controllers';

    /**
     * {@inheritdoc}
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
}
Модуль чекаута, не отрабатывает:

Код: Выделить всё

<?php

namespace frontend\modules\checkout;

use yii\filters\AccessControl;
use common\filters\UserCompanyAccessFilter;

/**
 * checkout module definition class
 */
class Checkout extends \yii\base\Module
{    
    /**
     * {@inheritdoc}
     */
    public $controllerNamespace = 'frontend\modules\checkout\controllers';
    
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'userHasCompany' => [
                'class' => UserCompanyAccessFilter::className(),
            ],
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['userAccess'],
                    ]
                ],
            ],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
        
    }
}

Регистрация компонентов в main-local.php:

Код: Выделить всё

'modules' => [
        'settings' => [
            'class' => 'frontend\modules\settings\Settings',
        ],
        'cart' => [
            'class' => 'frontend\modules\cart\Cart',
        ],
        'blog' => [
            'class' => 'frontend\modules\blog\Blog',
        ],
        'checkout' => [
            'class' => 'frontend\modules\checkout\Checkout',
        ],
        'orders' => [
            'class' => 'frontend\modules\orders\Orders',
        ],
    ],
Т.Е. при вызове незарегестрированного пользователя, Арр не перекидывает на регистрацию а стразу начинает дефолтный контроллер. В чем причина?

masson
Сообщения: 471
Зарегистрирован: 2012.07.03, 15:59

Re: Module не обрабатывает behaviors() почему?

Сообщение masson » 2019.06.23, 10:36

Xdebug в помощь. Посмотреть что и как работает пошагово, в т.ч значение Yii::$app->user

Аватара пользователя
leonenco
Сообщения: 101
Зарегистрирован: 2017.01.30, 22:42

Re: Module не обрабатывает behaviors() почему?

Сообщение leonenco » 2019.06.24, 04:02

Решил. Была ошибка в конструкторе дефолтного контроллера. Но вот теперь вопросЖ почему модуль вместо того чтоб обрабатывать свои бехавиорс, получает интстанс дефолного контроллера в первую очередь прежде чем вызывать бехавиорс?

Ответить