HMVC в Zend Framework - PullRequest
       5

HMVC в Zend Framework

4 голосов
/ 14 октября 2010

Можно ли использовать шаблон HMVC в Zend Framework? Он реализован в Kohana 3 по умолчанию, и мне это очень нравится, поэтому теперь я хочу использовать его в Zend Framework.

Редактировать

Я хочу сделать возможным: 1) включить полный запрос (например, контроллер / действие) в другой запрос 2) сделать прямой вызов на контроллер / действие, как указано выше

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

Редактировать 2

Чтобы быть немного более ясным: У меня есть объект страницы, который содержит несколько элементов. Этими элементами могут быть простые элементы (текст, изображение и т. Д.) И специальные элементы, которые являются контроллером: вызовы действий. Каждая страница может содержать «неограниченные» (специальные) элементы. Я просто хочу пройтись по этим элементам, определить, с каким типом элемента я имею дело, и добавить результат этого элемента в содержание моего представления.

Как:

foreach($Page->Elements AS $Element) {
    switch(get_class($Element)) {
        case "Base\TextElement":
            // Add text element to content
            ...
            break;
    case "Base\SpecialElement":
            // Get result of the controller:action call
            break;
        case "Base\ImageElement":
            // Add image element to content
            ...
            break;
        default:
            echo "No case defined for ".get_class($Element);
            die;
    }
}

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Все зависит от того, что вы пытаетесь сделать.

Возможно, помощник стека действий или вида действий выполнит эту работу за вас, но это может быть не лучшим решением, поскольку накладные расходы на диспетчеризацию (вероятно, будут удалены в ZF2).

Второй подход - просмотр помощников с обращением к моделям и действиям в контроллерах напрямую. Вы можете использовать помощники действий (и статический вызов к ним) для доступа к логике контроллера.

Также смотрите этот пост в блоге:

Использование помощников действий для реализации многократно используемых виджетов - phly, boy, phly

0 голосов
/ 24 апреля 2011

Поскольку шаблон HMVC Коханы, в конечном счете, дает вам возможность обслуживать HTTP-запросы внутри, вы можете создать адаптер Zend_Http_Client, который делает то же самое. Я написал несколько доказательств концепции кода, чтобы сделать это один раз; см. zend-http-client-adapter-internal .

Пример вызова HelloController из IndexController:

class IndexController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $client = new Zend_Http_Client("http://api.local/hello/?name=Clem");

        $client->setAdapter(new Http_Client_Adapter_Internal(
            $this->getFrontController()
        ));

        $response = $client->request();
        echo $response->getBody();
    }

}

Как видите, вместо Request::factory($url) Коханы вам нужно создать клиент (я думаю, что имя хоста api.local не используется, но необходимо для удовлетворения некоторых утверждений), а затем установить его адаптер. Эти два шага, очевидно, могут быть выполнены с помощью функции-оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...