2013-12-02 3 views
1

Мне нужно позвонить контроллеру, скажем, 'faq_view' внутри контроллера администратора, как структура URL admin/faq_view вот так, как я могу это сделать?Контроллер вызова в другом контроллере - CodeIgnitor

например:

site.com/maincontroller/function

site.com/maincontroller/othercontroller/function

Благодаря

+0

http: // stackoverflow.com/questions/14165895/how-to-load-a-controller-from-another-controller-in-codeigniter –

+0

@SheikhHeera: thanx! Я использую HMVC, но ваша ссылка не поддерживает мой вопрос – TED

ответ

4

Затем просто перенаправить страницу. Если вы хотите просто вызвать функцию, вызовите ее через AJAX.

Это зависит от того, что вы точно хотите сделать. Если вы хотите просто вызвать функцию, это не правильный путь. Контроллер, поскольку он определяет себя, управляет потоком страниц, которые появляются в последовательности. Контроллер отвечает за отправку команд в связанное с ним представление, чтобы изменить представление представления модели.

Итак, если вы говорите, что хотите вызвать контроллер внутри другого контроллера, это должно означать, что вы собираетесь перенаправить на другую страницу.

Обновленный ответ:

Просто предположим, у вас есть new_function на maincontroller, который вызывает функцию из othercontroller. Функцию не нужно определять на othercontroller. Добавить следующую строку на routes.php.

$routes['maincontroller/new_function'] = 'othercontroller/new_function'; 

Теперь вы можете вызвать функцию othercontroller в maincontroller/new_function.

+0

. Настоящая цель этого - у меня есть модули, которые должны вызываться под admin/i.e: admin/faq, admin/user. Один из способов, которым я знаю использование маршрутов, может это сделать. Но я действительно хочу назвать эти вспомогательные модули через admin/это возможно? – TED

+0

см. Обновленный ответ ... – hsuk

+0

этот путь правильный спасибо .... – TED

1

Ваши контроллеры являются частью уровня представления и не должны содержать логику приложения. Это означает, что вам не нужно будет вызывать контроллер с другого контроллера, а не реорганизовывать ваше приложение и перемещать логику домена на уровень модели.

Теперь, если у вас есть метод, который вам нужен в нескольких контроллерах, скажем, например, вам нужен метод шаблона, который автоматически добавляет ваши представления заголовка и нижнего колонтитула.

Если это так, создайте базовый класс, который расширит ваши контроллеры.

Если вы говорите только о проблеме маршрутизации, просто используйте файл маршрутов для этого. Мне не нравится автоматическая маршрутизация CI, и ее следует избегать, так как это приведет к дублированию URL-адресов для одного и того же ресурса.

+0

+1 - полностью согласен! – swatkins

2

Вы всегда можете вызвать контроллер внутри другого контроллера, но это работает только для вызова одного контроллера, насколько я пробовал. Предположим, вы пытаетесь загрузить контроллер внутри контроллера. Вы можете попробовать это:

$this->load->library('../controllers/myothercontroller'); 

Тогда это сделать:

$this->myothercontroller->function_name(); 

Вот оно! Теперь вы можете получить доступ к любой функции внутри myothercontroller (контроллера) в вашем текущем контроллере. Надеюсь, это тоже поможет.

+0

Это можно назвать только один раз. Если вы попытаетесь позвонить другому контроллеру, вы получите «Неопределенное свойство». – machineaddict

+0

@machineaddict, значит ли это, что я плохо разбираюсь в этом коде? Если да, тогда, пожалуйста, скажите мне, как я могу сделать лучше. Спасибо – warfreak92

+1

Контроллер не должен вызываться в другом контроллере, это не так, как работает MVC. Тем не менее, HMVC - лучший выбор, где вы можете это сделать. Но если вы не хотите устанавливать HMVC в Codeigniter, это ярлык, и он хороший, если вы используете его только один раз в каждом контроллере. – machineaddict

Смежные вопросы