Как правильно передать параметры контроллеру Kohana 3.3, вызываемому через HMVC?

Я пытаюсь использовать подход Kohana 3.3 HMVC. Я создал представление и контроллер для создания сегмента страницы (предназначенной для интеграции в фактическую веб-страницу другим контроллером и никогда не доступной через HTTP извне контроллера), заполненной записями данных, полученными через ORM. Что мне нужно, так это передать некоторые данные (критерии выбора записей) из верхнего контроллера через средний контроллер в модель ORM. Изменение данных GET/POST, как предлагается здесь, кажется дурацким (поскольку это изменит весь состояние приложения, а не целевого контроллера, насколько я понимаю) (но, возможно, это считается нормальным в мире PHP, я не знаю (я исхожу из строгого мира C++/C#/Java/Scala), позвольте мне знать, если это так). Есть ли способ лучше?


person Ivan    schedule 03.02.2014    source источник


Ответы (1)


Подход HMVC работает так же, как обычный запрос, за исключением того, что он имеет собственный экземпляр класса запроса. Из подзапроса HMVC вы можете получить доступ к родительскому объекту запроса, загрузив первоначальный запрос.

 $parent_request_query = $this->request->initial()->query();

Вы также можете получить доступ к текущему запросу.

 $current_request_query = $this->request->current()->query();

Вы также можете просто передать параметры.

 $params = array(
      'passing' => 'data' 
 );
 echo Request::factory('controller/action')->query($params)->execute()->body()
person Peter    schedule 03.02.2014
comment
Итак, вы говорите, что способ, которым я должен передавать данные контроллеру B, когда я звоню из контроллера A, — это установка полей контроллера A (например, его общедоступные свойства или фактическое изменение GET/POST) и чтение их в контроллере B? - person Ivan; 04.02.2014
comment
Вот как я это делаю. Я стараюсь, чтобы каждый дополнительный сегмент HMVC был как можно более независимым. То, что дочерний сегмент самостоятельно захватывает свои переменные, делает его очень независимым. - person Peter; 04.02.2014
comment
Кстати, можете ли вы объяснить, почему $this->request->current()->query('id'); в подчиненном контроллере (один вызывается через Request::factory), а $this->request->param('id'); в верхнем контроллере (один вызывается непосредственно через маршрутизацию HTTP-запросов)? Вторая версия не работает в первом случае, а первая не работает во втором (я пробовал обе версии в обоих случаях, стремясь использовать одну и ту же для обоих, чтобы сделать код красивее). - person Ivan; 10.02.2014
comment
При вызове параметров, которые передаются в подзапрос, я использую ‹code›$this-›request-›query()‹/code›. Если бы я хотел получить исходные параметры запроса, я бы использовал ‹code›$this-›request-›initial()-›query()‹/code›. Но я не совсем уверен, понимаю ли я, о чем вы спрашиваете. Возможно, вы можете опубликовать более подробный вопрос. - person Peter; 13.02.2014