Проблемы с пониманием yii\di\Container

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
masson
Сообщения: 409
Зарегистрирован: 2012.07.03, 15:59

Проблемы с пониманием yii\di\Container

Сообщение masson » 2019.04.16, 21:04

В файле config/main.php имеем следующее :

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

'container' => [
	'definitions' => [
		kartik\select2\Select2::class => [
			'theme' => kartik\select2\Select2::THEME_CLASSIC,
			....
		]
	]
]


В файле view.php следующее :

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

    <?php print_r(Yii::$container->getDefinitions()[Select2::class]) ?>	

    <?= $form->field($model, 'attr')->widget(Select2::class, [
        'data' => $model::getListData(),
    ]) ?>

В итоге - print_r выводит то что нужно, но сам виджет данные из контейнера не цепляет.
Если ввести данные из definitions непосредственно внутрь widget() - все работает как надо.
Никаких ошибок нет.
Правильно ли я понимаю что данные из конфига должны на автомате цепляться?

Linux Mint 18.3
Apache/2.4.18
PHP 7.2.17
Yii 2.0.17.
Что делаю не так?

uEhlO4a
Сообщения: 40
Зарегистрирован: 2017.08.12, 19:19

Re: Проблемы с пониманием yii\di\Container

Сообщение uEhlO4a » 2019.04.19, 01:14

насколько я помню, то что ты указываешь
[
'data' => $model::getListData(),
]
переписывает тебе
'theme' => kartik\select2\Select2::THEME_CLASSIC,

я не проверял, но попробуй сделать
<?= $form->field($model, 'attr')->widget(Select2::class)?>
и 'theme' должно примениться.

если оно, то наверно один выход, это писать

'container' => [
'definitions' => [
kartik\select2\Select2::class => function ($container, $params, $config) {
return new kartik\select2\Select2(array_merge($params, ['theme' => kartik\select2\Select2::THEME_CLASSIC,]));
}
]
]

Ответить