Как в CI из одного контролера вызвать другой?

194 views
Skip to first unread message

Holden

unread,
Aug 8, 2008, 2:15:46 AM8/8/08
to СodeIgniter-ru
Как в CI из одного контролера вызвать другой?
Т.е. есть контролер. Он чего-то делает, а затем он должен сделать то
же самое, что делает другой контролер. Как вызвать необходимый метод
другого контролера?

Vaviloff

unread,
Aug 31, 2008, 11:00:21 PM8/31/08
to СodeIgniter-ru
Один из наиболее часто появляющихся вопросов на родном форуме
проекта.
Правильный ответ: никак.
Обоснование: два разных контроллера не должны содержать код, который
делает "то же самое".
Повторяющийся функционал выносите в модель (если это работа с БД) или
библиотеку, или хелпер/плагин.

Kerrygun

unread,
Sep 1, 2008, 8:43:08 AM9/1/08
to СodeIgniter-ru
Правильный ответ - можно : )
Другой вопрос - зачем действительно это делать, если можно
пользоваться моделями. Ну а если всё-таки хочется - я делаю это так (в
моем движке всегда срабатывает дефолтный контроллер, который уже потом
сам решает какому контроллеру передать управление):

$controller='controller-name';
$file="/path/to/controller/".$controller.EXT;
require($file);

$CI = &get_instance();
$this->$controller = new $controller;
foreach (array_keys(get_object_vars($CI)) as $key)
{
if (!isset($this->$controller->$key))
{
$this->$controller->$key = &$CI->$key;
}
}

нужную функцию контроллера нужно вызывать самому.
Reply all
Reply to author
Forward
0 new messages