Yii Framework Forum: Init + Config = Troubles - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Init + Config = Troubles опять про модуль Rate Topic: -----

#1 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 337
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 14 March 2014 - 02:27 AM

всем привет

сорри, конечно за настойчивое не понимание, но все же

пытаюсь создать локальный для модуля конфиг: чтобы грузить нужные настройки из него
создал в модуле директорию config
в ней - файл config.php
содержание этого файла =
return array(

    'components'=>array(          

        'errorHandler' => array(
                'errorAction' => 'mymodule/controller/error'), 

    ), // end components   

);

подключил конфиг в init
$config = require dirname(__FILE__).DIRECTORY_SEPARATOR.'config/config.php';
$this->configure($config);

спецом вбрасываю исключение для проверки - сработает или нет обработчик ошибок из модуля = происходит облом

срабатывает ошибка приложения а не модуля

почему?
и есть ли возможность у модуля иметь полновесный конфиг?
I'm sorry for my English...
0

#2 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,688
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 14 March 2014 - 02:39 AM

Так работает:

	public function init()
	{
		Yii::$app->setComponent('errorHandler', [
			'class' => 'yii\base\ErrorHandler',
			'errorAction' => 'site/test',
		]);

		return parent::init();
	}


Ищите, где облажались.

Лично у меня есть сомнения насчет
$this->configure($config);


Это Вы модуль же конфигурируете, а в приложении вызывается что-нибудь типа
\Yii::$app->errorHandler->паниковать(),

что является синонимом
\Yii::$app->getComponent('errorHandler')->паниковать().

God is real unless declared as integer
0

#3 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 337
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 14 March 2014 - 02:58 AM

to ORey,

вообще какая-то хрень творится с конфигурированием модуля...
вот так РАБОТАЕТ
Yii::app()->setComponents(array(
    'errorHandler' => array(
            'errorAction' => 'paul/qwe/error'
        ), 
));

а так НЕ РАБОТАЕТ
$this->setComponents(array(
    'errorHandler' => array(
            'errorAction' => 'paul/qwe/error'
        ), 
));

встречал решения на основе
public function beforeControllerAction($controller, $action)
{
   Yii::app()->errorHandler->errorAction='admin/default/error';
}

а уж про использование компонентов внутри модуля - просто абзац!

p.s. сейчас склоняюсь к конфигурированию на этой основе = Yii::app()->setComponents
I'm sorry for my English...
0

#4 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 337
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 14 March 2014 - 02:59 AM

View PostORey, on 14 March 2014 - 02:39 AM, said:

return parent::init();

обязательно чтобы не было моветоном?
I'm sorry for my English...
0

#5 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,688
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 14 March 2014 - 04:37 AM

View Poststyleroom, on 14 March 2014 - 02:58 AM, said:

to ORey,

вообще какая-то хрень творится с конфигурированием модуля...
вот так РАБОТАЕТ
Yii::app()->setComponents

а так НЕ РАБОТАЕТ
$this->setComponents


Я вижу, я не был понят.

Смотрите, какая штука. Вот есть у Вас класс "приложение" (потомок класса "модуль", ну пофиг). К нему прицеплены некоторые компоненты, допустим, errorHandler. Стандартный обработчик ошибок делает, допустим, следующее: при перехвате эксепшена передает управление на $app->getComponent('errorHandler').

Первым способом вы тупо подтыкаете в app() свой компонент (этакий dependency injection), поэтому все вызовы к этому компоненту (в частности, вызов от обработчика ошибок) отработают как надо.

Во втором случае Вы подтыкаете компонент в пространство МОДУЛЯ, поэтому все вызовы типа $app->getComponent('errorHandler') продолжат использовать старый компонент. При этом для запросов к компонентам модуля наверняка можно использовать что-то типа $app->getModule('myModule')->getComponent('errorHandler'), но это не Ваш случай, поскольку перехватчик ошибок всегда вызывает компонент приложения.

Вот, немного муторно вышло, но надеюсь идея понятна. Детали надо уже в api reference смотреть.

UPD. И, кстати, я Вам весело и задорно выкатил синтаксис Yii2, в yii1 конечно нужно использовать app() вместо $app, ну и так далее.
God is real unless declared as integer
0

#6 User is offline   styleroom 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 337
  • Joined: 14-January 12
  • Location:Долгопрудный, Россия

Posted 14 March 2014 - 04:44 AM

View PostORey, on 14 March 2014 - 04:37 AM, said:

UPD. И, кстати, я Вам весело и задорно выкатил синтаксис Yii2, в yii1 конечно нужно использовать app() вместо $app, ну и так далее.

это я сразу осознал :rolleyes:
и у меня еще вот какой вопрос = как обратится к компоненту модуля внутри представления модуля?
так =
Yii::app()->getComponent('mypop')->str;

почему спрашиваю: получаю ошибку при
echo Yii::app()->getComponent('mypop')->str;

I'm sorry for my English...
0

#7 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,688
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 14 March 2014 - 05:48 AM

См выше. getModule попробуйте.
God is real unless declared as integer
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users