Zend рендеринг статический / динамический с несколькими контроллерами - PullRequest
1 голос
/ 23 сентября 2011

Я довольно новичок в Zend (читайте документы, касающиеся маршрутизаторов и контроллеров).

Мой StaticController и IndexController:

class StaticController extends Zend_Controller_Action
{
    public function displayAction()
    {
        $page = $this->getRequest()->getParam('filename');
        $this->render($page);
    }
}

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $albums = new Application_Model_DbTable_Albums();
        $this->view->albums = $albums->fetchAll();
    }
    public function registerAction()
    {
        ...
    }
}

application.ini:

resources.router.routes.staticpage.route = /:filename
resources.router.routes.staticpage.defaults.controller = static
resources.router.routes.staticpage.defaults.action = display

Мои статические URL-адреса: site.com/faq site.com/privacy ...

Эта работа, однако другие, такие как site.com/register, используют StaticController, а не IndexController, я не могу сказать, что меня удивило это поведение.

Эти статические страницы (о нас, терминах и условиях ...) необходимо включить в логику zend для перевода .po.

Я могу придумать множество различных способов достижения этого вне рамок Zend, но очень хотел бы сделать это правильным zend способом.

Как различить статический и динамический контент и при этом сохранять красивые URL-адреса?

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Вы можете сделать это следующим образом:

resources.router.routes.staticpages.route = "/:filename"
resources.router.routes.staticpages.defaults.controller = static
resources.router.routes.staticpages.defaults.action = display
resources.router.routes.staticpages.reqs.filename="(list|of|static|pages)"

Если вы не знаете, что такое reqs, это очень просто.Для каждого параметра, указанного в 'reqs', вы указываете регулярное выражение, которому оно должно соответствовать, чтобы использовать этот маршрут.

Но я бы лично использовал действие на статическую страницу вместо параметра в одном действии, что потребовало быэтот маршрут:

resources.router.routes.staticpages.route = "/:action"
resources.router.routes.staticpages.defaults.controller = static
resources.router.routes.staticpages.reqs.action="(list|of|static|pages)"

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

0 голосов
/ 24 сентября 2011

Вам следует рассмотреть возможность использования префикса для статического контента, чтобы маршрутизатор знал, что вы пытаетесь извлечь статический контент и не пытаетесь сослаться на действие в IndexController.

resources.router.routes.staticpage.route = /static/:filename
resources.router.routes.staticpage.defaults.controller = static
resources.router.routes.staticpage.defaults.action = display
...