我刚刚使用Zend Framework及其MVC组建了一个非常基本的站点。 (实际上,我现在甚至不使用模型,到目前为止,它只是静态信息的控制器/视图)。
当我开始使用Forms时,我意识到在Zend_Form的示例中,他们使用类似这样设置表单的动作:
$form->setAction('/user/login')
其中包含网址。我知道Zend Framework有路由,并且它们可以被命名,但我似乎无法从手册中了解如何为某些Controller / Actions创建一个简单的路由,以便我可以这样做:
$form->setAction($named_route)
// or
$form->setAction('named_route')
我希望我的问题很明确。我无法找到任何重复的问题,但如果你发现一个并指出它我不会介意。
资源链接与示例一样好,所以如果您知道某个地方的博客文章,请不要浪费时间。谢谢!
答案 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网址开箱即用,很好。
随意添加注释和更正,以确定它应该如何工作!