Проблема с именами контроллеров и createController

Добрый день, столкнулся с такой проблемой:

Существуют два разных модуля, например, admin и catalog, в них контроллеры с одинаковыми именами DefaultController. В DefaultController’e модуля admin хочу вызвать метод test DefaultController’а модуля Catalog следующим образом:

Файл: /protected/modules/catalog/controllers/DefaultController.php




public function actionIndex()

{

    $c = Yii::app()->createController('catalog/dafault');

    $c[0]->test();

}



Но в результате в $c попадает DefaultController модуля admin (а не необходимого мне, catalog) и там, соответственно, никакого метода test нет. При переименовании контроллеров проблема пропадает.

Версии php 5.3.3, Yii 1.1.10.

Прошу помощи!

Не уверен, но похоже без namespace которых в 5.3 еще нет это не разрулить. Не может же быть два класса с одинаковым именем.

А зачем тебе вызывать метод другого контроллера? Это пахнет плохим кодом.

Можно сделать редирект на другой контроллер, или вынести общий функционал куда-то в отдельный файл, в модель или в action который сможешь подключить к обоим контроллерам.

Замут в следующем: модуль admin обращается к каким то экшенам модуля catalog, например (create, delete), которые принадлежат СategoryController. Я посчитал что это правильное решения, весь функционал работы с каталогом хранить, непосредственно, в модуле catalog. А остальное разруливать на уровне доступа к экшенам. Что-то похожее видел в modx revo. В принципе мне это решение понравилось. Хотя может я и не прав.

А вот насчёт “Не может же быть два класса с одинаковым именем”, я считаю что когда ведётся разработка разных модулей разными людьми, которые мало знают о действиях каждого, то есть вероятность, что именование классов у них будет совпадать. Но решение наверняка существует, просто малый опыт работы с yii не позволяет его применить :(

Мне кажется, что ограничения РНР 5.3 мешают такой стратегии.

Я вообще почти не пользуюсь модулями, потому что по настоящему сделать их независимыми друг от друга делать очень утомительно. А от связанных между собой модулей кажется толку нет, одно гордое название "модуль".