dkrylov
@dkrylov

Как реализовать компонент в модуле yii2?

Здравствуйте!

Подскажите как реализовать запуск и использование компонента в модуле!

Т.е. к примеру имеем модуль "shop" в нем есть папочка /components/ а там компонент для работы с корзиной товаров "cart". И через OrderController должна реализовываться работа с этим компонентом.

Вообще правильный ли я подход реализовываю? Думаю те кто разбираются понял что я делаю и как. Уделите пожалуйста минутку времени своего)
  • Вопрос задан
  • 722 просмотра
Решения вопроса 1
Screamie
@Screamie
Full-stack разработчик
Здравствуйте.

Модуль это по сути экземпляр приложения и он позволяет использовать сервис локатор и DI как и сам Yii2.

Если я правильно понимаю ваш вопрос, то вам нужно подключить в конфигурации модуля ваш компонент через DI контейнер. Тогда он будет доступен из модуля.

В конфигурации это может выглядеть примерно так:

//...
'modules' => [

        'shop' => [
            'class' => 'common\modules\shop\Module',
            'components' => [

                'cart' => [
                    'class' => 'common\modules\shop\components\Cart',
                    'property' => 'value',
                ],
            ],
        ],
],
//...


В классе common\modules\shop\Module заводите публичные поля components и cart. А в методе common\modules\shop\Module::init() осуществляете инициализацию вашего компонента Cart через
$this->cart = Yii::createObject($this->components['cart']), как написано в оф.доках:

// create an object using a configuration array
$object = Yii::createObject([
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
]);


Можно все это сделать и без конфигурирования, просто используя DI в методе init() вашего модуля. Но тогда код будет сильно связанным и вы не сможете конфигурировать ваш компонент без правок кода модуля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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