Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Вызов из контроллера другого контроллера http://forum.kohanaframework.su/viewtopic.php?f=31&t=233 |
Страница 1 из 2 |
Автор: | andrey55555 [ 03 июл 2012, 16:55 ] |
Заголовок сообщения: | Вызов из контроллера другого контроллера |
Всем доброго дня! Есть следующий вопрос. Я хочу сделать так, что бы страница собиралась как конструктор из нескольких элементов (например: меню, левый блок, правый блок, центральная часть). Для каждого такого элемента логично было бы написать свой контроллер и при формировании страницы подключать требуемые контроллеры. То есть есть страница http://mysite/page/index. Она формируется контроллером Page, функцией action_index(). Хочу сделать так, чтобы внутри action_index() вызывались (подключались) другие контроллеры, отвечающие за формирование элементов страницы. Как-то так:
public function action_index() { вызов контроллера меню; вызов контроллера левого блока; вызов контроллера центральной части; вызов контроллера правого блока; } Как правильно реализовать вызов контроллеров? Какие есть способы обращения из контроллера к другому контроллеру? В моем случае через «роуты» наверное не получиться, так как контроллеры элементов страницы не имеют самостоятельного адреса в URL. Адрес URL у страницы один: http://mysite/page/index. |
Автор: | mamahtehok [ 03 июл 2012, 18:49 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
Внутреннее обращение Код:
т.е. для вашего случая будет что то типа Код:
|
Автор: | andrey55555 [ 03 июл 2012, 20:00 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
mamahtehok писал(а): Внутреннее обращение Код:
А роут надо писать? Разве Request::factory('uri') работает не с URL? И еще вопросы. Где должны быть расположены файлы 'menu', 'uri', 'sidebar'? В [url]application\classes\controller\[/url]? Как должны называться внутри файлов 'menu', 'uri', 'sidebar' функции (методы) ? |
Автор: | andrey55555 [ 04 июл 2012, 00:35 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
Цитата: Внутреннее обращение Код:
Спасибо "mamahtehok", работает! Только я не понял как оно работает без роута ![]() И где все же должны быть расположены файлы 'menu', 'uri', 'sidebar'? В application\classes\controller\? Или kohana их найдет и в другой папке, нпример: application\classes\controller\page\? И как можно обращаться к функциям (методам) внутри файлов 'menu', 'uri', 'sidebar' ? У меня сейчас работает с единственным методом:
А как вызывать другие функции (методы)? |
Автор: | Wapruks [ 04 июл 2012, 09:05 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
если вызываемый контроллер лежит в application\classes\controller\page\ то и подключаешь как $menu = Request::factory('page/menu')->execute()->body(); |
Автор: | andrey55555 [ 04 июл 2012, 13:07 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
Wapruks писал(а): если вызываемый контроллер лежит в application\classes\controller\page\ то и подключаешь как $menu = Request::factory('page/menu')->execute()->body(); Пробовал - не работает. Работает если только 'menu' лежит в application\classes\controller\ Или надо еще роут писать? И как подключать другие методы? |
Автор: | mamahtehok [ 04 июл 2012, 13:27 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
Requests работает с uri т.е. для него необходимы роуты. Если вас это не устраивает то можно использовать стандартный способ для пхп Код:
|
Автор: | andrey55555 [ 04 июл 2012, 14:14 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
mamahtehok писал(а): Requests работает с uri т.е. для него необходимы роуты. Если вас это не устраивает то можно использовать стандартный способ для пхп Код:
Спасибо, "mamahtehok" за ответ! Все четко и ясно! Лично я нашел несколько способов подключения необходимых контроллеров (классов) внутри другого контроллера: 1. Стандартный способ для пхп Код:
2. Подключение необходимого контроллера (класса) как хелпера Достаточно расположить файл необходимого класса в application\classes\ и сразу использовать Код:
kohana сама его найдет и подключит. 3. Подключение необходимого контроллера (класса) как модели (очень похоже на Стандартный способ для пхп) Код:
Ну и последний способ, как вы предлагали через Requests. Этот способ у меня то же сработал даже без роутов ![]() Наверное по тому, что файл контроллера лежал в application\classes\controller\ и имел единственный метод index. После всего у меня возникли еще вопросы. 1. Как все же идеологически правильно подключать необходимые контроллеры (классы) внутри другого контроллера? 2. Обязательно в названии класса должно присутствовать слово Controller? 3. В чем разница между просто классом, контроллером, хелпером и модулем (если писать свой модуль)? Разъясните, пожалуйста, в чем тут нюанс? |
Автор: | mamahtehok [ 05 июл 2012, 13:51 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
1. Идеологически правильно все же через хелперы или внутренние реквесты. 2. Controller должно присутствовать обязательно в классе который реализует контролер, так же как в класе реализующем модель дложно присутствовать Model_ 3. класс базовая единица ООП (подробно можно причитать в учебнике по php), контроллер это класс, в соответствии с парадигмой mvc обеспечивающий коммуникации между пользователем моделью и представлением, хелпер класс предоставляющие функции для решения каких то задач например хелпер arr собирает функции для работы с массивами. модуль это приложение реализующее коакой-то конкретный функционал например антентификации пользователя или работы с БД. Как-то так. |
Автор: | andrey55555 [ 05 июл 2012, 14:59 ] |
Заголовок сообщения: | Re: Вызов из контроллера другого контроллера |
Спасибо, "mamahtehok" за Ваш ответ! Ситуация проясняется ![]() В моем случае контроллеры, отвечающие за формирование элементов страницы не имеют самостоятельных адресов URL, поэтому, как я понял, они должны быть оформлены в виде хелперов. То есть как обычные классы для пхп, и лежать они должны кучей в application\classes\. Скажите, а где можно настроить, чтобы хелперы kohana искала не только в application\classes\, а например и в application\classes\page\? Такое можно сделать? |
Страница 1 из 2 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |