Детские контролеры Kohana с HMVC - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть главный контроллер, и я хочу вызвать дочерние контроллеры с этого контроллера с помощью HMVC.Я установил правило, которое направляет параметр к определенному действию, которое вызывает дочерние контроллеры с «Request :: factory» для основного контроллера, но оно не работает из-за бесконечного цикла.Есть ли способ сделать это?

Я должен использовать HMVC, потому что главный контроллер отправляет некоторую информацию дочернему контроллеру, поэтому мне нужен управляющий слой.для CMS.

Основной контроллер: http://pastebin.com/nt2fhMEy

Пример дочернего контроллера: http://pastebin.com/WqaHZaxf

Маршрут: http://pastebin.com/6JGFf2i2 (я не сделал 'Не настраивайте caction и cid.)

Дополнительное примечание: Это будет своего рода грубый модуль для моей CMS.Основной контроллер загрузит основной шаблон и некоторые конфиги.Также главный контроллер включает в себя некоторые функции ORM, и дочерний контроллер должен иметь возможность использовать parent :: functionname.Дочерние контроллеры находятся в директории cruds /, и cms создает их автоматически.

1 Ответ

2 голосов
/ 07 января 2012

В ваших представлениях о контроллерах и HMVC есть несколько ошибок.

Лучший способ сделать это - использовать объектно-ориентированные контроллеры.Под этим я подразумеваю, что «дочерние контроллеры» должны расширять основной контроллер.

Разрешить основным контроллерам расширять Controller_Template, а дочерние контроллеры расширять основной контроллер.через маршруты у вас будет не только доступ к родительским свойствам, но ваш запрос будет делать следующее:

  1. Before метод основного контроллера
  2. Before метод дочернего контроллера.
  3. Действие дочернего контроллера.
  4. После метода дочернего контроллера.
  5. После метода родительского контроллера.

Из чего я получаюот вашего вопроса вам вообще не понадобится HMVC.На самом деле это очень плохая схема для передачи данных.Имейте в виду, что когда вы выполняете внутренний запрос через HMVC, это фактически совершенно новый запрос.Он пройдет через маршруты и этот список снова.У вас не будет доступа ко всем предыдущим свойствам запроса.

Еще один совет: не помещайте функции ORM в главный контроллер.Вместо этого используйте актуальные модели ORM.

...