<rmcreative>

RSS

HMVC

10 февраля 2011

В последнее время часто всплывает тема иерархического MVC или HMVC. Штука довольно интересная, но по-простому почти нигде не описана, что и исправим.

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

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

В большинстве реализаций, таких как HMVC в Kohana 3, CodeIgniter Modular Extensions, Zend Framework Action View Helper и runController в Yii, при этом, отдельного HTTP-запроса не происходит.

Kohana 3 также умеет запускать контроллеры по HTTP, хотя, кроме весьма неплохой интеграции с её роутингом, ничего нового тут нет: использовать CURL или сокеты для дополнительного запроса не сложно.

Комментарии RSS

  1. №3881
    biakaveron
    biakaveron 10 февр. 2011 г., 9:11:19

    Kohana v3.1 умеет делать подзапросы (в том числе и внешние) также через CURL и PECL_HTTP :)

    PS.

    по-простому почти нигде не описана, что и исправим.

    Не исправили :) Вроде бы на Хабре недавно был перевод статьи про HMVC в ko3

  2. №3883
    Ekstazi
    Ekstazi 10 февр. 2011 г., 11:23:09

    Оперативно )

  3. №3884
    Diolektor
    Diolektor 10 февр. 2011 г., 12:21:05

    Sam Dark, большая просьба. Не мог бы написать статью, с примером реализации такой схемы на Yii. Хотелось бы посмотреть как это делается правильно и избавить себя от говнокода. Спасибо.

  4. №3885
    Sam
    Sam 10 февр. 2011 г., 13:03:45

    biakaveron, я упомянул про Kohana 3 и вызов действий контроллера по HTTP. Что-то забыл?

    В статье ( http://habrahabr.ru/blogs/kohanaphp/113117/ ) вроде та же самая мысль, что и у меня, но описано подлиннее и с применением именно к Kohana.

    Diolektor, при использовании Yii особого смысла в HMVC нет: есть виджеты.

  5. №3886
    Ekstazi
    Ekstazi 10 февр. 2011 г., 13:22:45

    Sam, Diolector А еще есть модули.

  6. №3887
    stalker
    stalker 10 февр. 2011 г., 16:42:06

    Мне в свое время вот эта статья помогла нормально разобраться с HMVC: techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

  7. №3888
    stalker
    stalker 10 февр. 2011 г., 16:43:59

    Вот, блин, на Хабре перевод этой же статьи оказывается ..

  8. №3912
    Максим
    Максим 14 февр. 2011 г., 1:32:15

    В cakePHP это реализуется методом requestaction, только не в курсе происходит ли при этом HTTP-запрос.

  9. №3992
    Ivan1986
    Ivan1986 03 марта 2011 г., 19:03:22

    Не понравилось в кохане то что эту вобщем-то старую фичу (уже года 3 как юзаю) распиарили как абсолютно новую вещь. И кстати в кохане нельзя в экшен передать что-то кроме строк. С учетом того что мы не привязаны к строке запроса, то как-бы могли бы сделать передачу всего что можно. (Опять-же 2 года как юзаю передачу массивов - например та-же менюшка, с подсвеченным текущим пунктом)

  10. №5968
    Иван
    Иван 01 марта 2012 г., 14:54:24

    Да, сам уже использую HMVC. в некоторых проектах очень сильно облегчает жизнь

  11. №9850
    Lev Bazdyrev
    Lev Bazdyrev 24 июня 2015 г., 16:50:38

    По поводу вашего куска кода:

    function _set_routing()
        {
          //копипейст из CI_Router.
     
          // Load routes from ME modules
          $modules = dir(MODBASE);
          while (false !== ($module = $modules->read())) {
            if($module != '.' && $module != '..'){
              @include(MODBASE.$module.'/config/routes'.EXT); 
            }          
          }
          $modules->close();
     
          //копипейст из CI_Router.
     
          // Load the routes.php file.
          @include(APPPATH.'config/routes'.EXT);
     
          //etc.

    куда его вставлять, а то ругается на константу.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.