Zend_Navigation несовместимо с Zend_Router при записи контроллера / действий? - PullRequest
2 голосов
/ 10 февраля 2011

Начинающий разработчик Zend Framework пытается найти простое решение проблемы Zend Routing. Я уверен, что один из вас может помочь.

У меня есть веб-сайт (встроенный в Zend Framework с использованием Zend_Navigation), который содержит 75% статического содержимого HTML-страницы и несколько контроллеров. Навигация верхнего уровня встроена в Zend_Navigation, проходя по частям.

Из-за моей работы я строю много сайтов по этим направлениям (содержащих много статических страниц), поэтому я хочу сделать это правильно. Я не хочу устанавливать контроллеры и действия для каждой из этих статических страниц (их много), и я хотел создать решение, в котором я использовал Zend_Controller_Router_Route для автоматической маршрутизации всего статического контента до StaticController чья работа заключается в том, чтобы включать или отображать страницы .phtml на основе парного соединения контроллер / действие в URL из какого-либо каталога, например /layouts/staticpages

Из-за SEO и по разным причинам я не хочу, чтобы сопряжение контроллера в URL для этих статических страниц отображалось как /static/page/page1 ... Это должны быть "описания реального мира" /section/page ( например, advantages/someadvantage)

Вот проблема: использование Zend_Controller_Router_Route может сделать работу, когда я настраиваю правильные маршруты, НО это портит что-то ужасное с Zend Navigation ... Я предполагаю, что Zend_Navigaion не очень хорошо работает с контроллером на лету / переключение действий.

Пример кода:

$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route('advantages/:page/*',
  array('controller' => 'static', 'action' => 'display', 'mode' => 'advantages',
    'page' => 'index'));
$router->addRoute('advantages', $route);

Это достаточно хорошо справляется с задачей переключения страниц в разделе «преимущества», но автоматическая запись контроллера / действия Zend_Navigation И выделение «активных» узлов в конечном итоге облажаются, потому что теперь он думает, что его контроллер «статичен». "и действие" дисплей ".

Является ли Zend_Navigation принципиально несовместимым с Zend_Controller_Router_Route? Есть ли лучший способ сделать этот единственный статический контроллер страницы или обрабатывать статический контент по всем направлениям?

1 Ответ

0 голосов
/ 23 декабря 2011

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

Проверьте Пример 4 в документации Zend .

// the following route is added to the ZF router
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// a page is created with a 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // required for isActive(), see note above
    'controller' => 'article', // required for isActive(), see note above
    'action'     => 'view',    // required for isActive(), see note above
    'params'     => array('id' => 42)
));

// returns: /a/42
$page->getHref();
...