Страница 1 из 3
Динамически изменить настройки модуля
Добавлено: 2015.01.16, 17:55
assd18
Здравствуйте. У меня есть модуль. Для него задаются настройки в конфигах. Когда я делаю Yii::$app->getModule они применяются. Можно ли как-то перед инициализацией модуля переопределить настройки?
Я пробовал так:
в контроллере делаю
Код: Выделить всё
Yii::$app->params['modules']['myModule']['property'] = 'testFromController';
Yii::$app->getModule('myModule');
.....
потом в самом модуле
Код: Выделить всё
public function init() {
parent::init();
Yii::configure($this, Yii::$app->params['modules']['myModule']);
}
получаю ошибку Undefined index: modules
если сделать print_r(Yii::$app->params['modules']['myModule']) он покажет значение которое было переопределено в контроллере - testFromController.
если же переопределить свойство в функции init() - все хорошо:
Код: Выделить всё
public function init() {
parent::init();
Yii::$app->params['modules']['myModule']['property'] = 'testFromModule';
Yii::configure($this, Yii::$app->params['modules']['myModule']);
}
Может это баг, я даже незнаю...
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.16, 18:13
dmeroff
Зачем такие сложности? Почему не делаете, например, так:
Код: Выделить всё
\Yii::$app->getModule('myModule')->property = 'propertyValue';
Если же все-таки нужно непосредственно до инициализации, то переопределяйте через DI контейнер:
Код: Выделить всё
\Yii::$container->set('my\module\Classname', ['property' => 'value']);
\Yii::$app->getModule('myModule');
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.16, 21:44
assd18
Если делаю так
Код: Выделить всё
\Yii::$container->set('my\module\Classname', ['property' => 'value']);
$module = \Yii::$app->getModule('myModule');
var_dump($module); die();
то все равно, значение property равняется тому, что было задано в конфигах, а не новому - 'value'
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 11:55
assd18
Может это из-за того, что я в контроллере модуля неправильно вызываю параметры?
я делаю так
Код: Выделить всё
$module = $this->module;
$module->property;
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 12:06
dmeroff
Да, вы правы, через DI контейнер не получится. Ну а чем вас не устраивает
Код: Выделить всё
\Yii::$app->getModule('myModule')->property = 'propertyValue';
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 12:12
assd18
Так тоже не выходит, все равно подтягивает значение из конфига, а не новое.
Код: Выделить всё
$module = \Yii::$app->getModule('myModule');
$module->property = 'property';
$module->runAction('controller\action');
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 12:13
lynicidn
dmeroff писал(а):Да, вы правы, через DI контейнер не получится. Ну а чем вас не устраивает
Код: Выделить всё
\Yii::$app->getModule('myModule')->property = 'propertyValue';
получится, если в конфиге не затирается
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 12:13
lynicidn
попробуйте ловить в конструкторе
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 12:14
lynicidn
переопределение (лайв) не все модули могут поддерживать, т.е. инициализацию лучше делать уже по устаканенному конфигу
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 13:13
assd18
lynicidn писал(а):переопределение (лайв) не все модули могут поддерживать, т.е. инициализацию лучше делать уже по устаканенному конфигу
А если в разных контроллерах я хочу подключить модуль с разными конфигами? Можно ли как-то в зависимости от контроллера подключать конфиги для модуля?
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.17, 13:56
lynicidn
не получится, т.к. объект в контейнере уже будет создан и конструктор не сработает при повторном вызове, да и init тоже, разве что в ручную его вызывать, что тоже должно учитываться
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 00:19
assd18
Может как-то можно через canSetProperty? Только я не понимаю, в модуле нужно создать метод?
Код: Выделить всё
public function setProperty($property) {
$this->property = $property;
}
а потом в контроллере вызывать так
Код: Выделить всё
$module = \Yii::$app->getModule('myModule');
$module->canSetProperty('property');
$module->setProperty( 'property');
или это вообще не подходит?
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 01:19
lynicidn
проверьте еще раз все, у вас видимо где то банальная ошибка
>
если сделать print_r(Yii::$app->params['modules']['myModule']) он покажет значение которое было переопределено в контроллере - testFromController.
тут должно вывести массив
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 11:26
assd18
Смотрите, что получается, переопределяю значение в контроллере
Код: Выделить всё
Yii::$app->params['modules']['myModuleId']['property'] = 'newvalue';
$module = \Yii::$app->getModule('myModuleId');
в модуле делаю print_r
Код: Выделить всё
public function init() {
parent::init();
print_r($this->property); //тут будет значение 'valuefromconfig'
print_r(Yii::$app->params['modules']['myModuleId']['property']); die(); //здесь будет 'newvalue'
}
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:08
assd18
Получается через Yii::$app->params['modules']['myModuleId']['property'] невозможно переопределить $this->property. Можете у себя попробовать вывести так как я? Если у Вас будут одинаковые тогда точно проблема у меня.
Где Вы делали print_r(Yii::$app->params['modules']['myModule']), в init() модуля или в другом месте?
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:10
lynicidn
assd18 писал(а):Смотрите, что получается, переопределяю значение в контроллере
Код: Выделить всё
Yii::$app->params['modules']['myModuleId']['property'] = 'newvalue';
$module = \Yii::$app->getModule('myModuleId');
в модуле делаю print_r
Код: Выделить всё
public function init() {
parent::init();
print_r($this->property); //тут будет значение 'valuefromconfig'
print_r(Yii::$app->params['modules']['myModuleId']['property']); die(); //здесь будет 'newvalue'
}
это ожидаемо, что вы тут хотели другое увидить?
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:21
assd18
Да нет, просто не могу понять как обратиться к переопределенному property. Свойства использую в контроллере модуля так:
Код: Выделить всё
public function actionIndex() {
$module = $this->module;
$module->property;
}
как тогда можно достучаться до нового значения property ?
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:24
lynicidn
так вы его не присваеваете в коде выше
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:29
assd18
Нет это просто пример обращения. На самом деле присваиваю и работаю с этим значением. Но оно всегда равняется тому которое было задано в конфигах.
Re: Динамически изменить настройки модуля
Добавлено: 2015.01.18, 12:36
lynicidn
вы должна показывать код чтобы можно было воспроизвести ошибку