使用MVC在Zend Framework中创建非常简单的命名路由

时间:2009-05-12 16:24:27

标签: php zend-framework

我刚刚使用Zend Framework及其MVC组建了一个非常基本的站点。 (实际上,我现在甚至不使用模型,到目前为止,它只是静态信息的控制器/视图)。

当我开始使用Forms时,我意识到在Zend_Form的示例中,他们使用类似这样设置表单的动作:

$form->setAction('/user/login')

其中包含网址。我知道Zend Framework有路由,并且它们可以被命名,但我似乎无法从手册中了解如何为某些Controller / Actions创建一个简单的路由,以便我可以这样做:

$form->setAction($named_route)
// or 
$form->setAction('named_route')

我希望我的问题很明确。我无法找到任何重复的问题,但如果你发现一个并指出它我不会介意。

资源链接与示例一样好,所以如果您知道某个地方的博客文章,请不要浪费时间。谢谢!

1 个答案:

答案 0 :(得分:1)

<强>参考文献: http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.standard - 查找“12.5.7.1.Zend_Controller_Router_Route”以获得更清晰的解释。

这不是最好的方法,但我有一个有效的例子。我欢迎更正。 在看到Shorten Zend Framework Route Definitions之后,我同意命名的Routes应该放在他们自己的配置中(我使用Django,并且命名的Views / URL通常是分开的) - 但是在这里我只是要在我的Bootstrap中定义Routes。

所以,在Bootstrap.php中,当然在Bootstrap类中,我已经创建了一个自动运行的函数,如下所示:

public function _initRoutes()
{
    $frontController = Zend_Controller_Front::getInstance();
    $route = new Zend_Controller_Router_Route(
        'login/', // The URL, after the baseUrl, with no params.
        array(
            'controller' => 'login', // The controller to point to.
            'action'     => 'index'  // The action to point to, in said Controller.
        )
    );
    $frontController->getRouter()->addRoute('loginpage', $route);
}

在上面的示例中,“loginpage”将是“命名路由”的名称。

因此,在我的LoginController中,(在构建表单的函数中)而不是

$form->setAction('/blah/login')

我检索指定Route的URL并将其传入,如下所示:

$form_action_url = $this->view->Url(array(), 'loginpage', true);
// -- SNIP --
$form->setAction($form_action_url) // ...

这可能毫无意义和错误,但目前似乎有效。 当Zend Framework自动将URL作为/ Controller / View(Action)/处理时,我想要一个命名URL的原因是因为我对这种事情嗤之以鼻。我一直在使用Django,其中URL是预定义的,我喜欢这样。

Zend Framework MVC网址开箱即用,很好。

随意添加注释和更正,以确定它应该如何工作!