如何在Zend Framework中格式化Controller内的URL?

时间:2011-02-21 03:50:51

标签: php zend-framework

能够以可移植的方式在控制器内部格式化URL(例如,用于JSON响应)会很好。是否有一种简单的方法可以在不首先创建Zend_View实例的情况下执行此操作?

2 个答案:

答案 0 :(得分:2)

这里有几点想法:

  1. 即使您正在生成JSON响应,您仍然可以通过ContextSwitch and AjaxContext动作帮助程序使用视图对象和视图脚本。

  2. 即使您没有使用视图脚本作为响应,您可能已经在Bootstrap中实例化了视图。因此,在控制器中,您实际上不会像访问那样创建视图。所以没有额外的开销。

  3. 如果“便携式”是指“跨项目”,那么可能是行动助手?将它放入另一个项目,配置帮助路径,你就可以了。如果“可移植”是指“更了解应用程序的路由”,那么您可能会使用视图对象。

答案 1 :(得分:1)

如果说“格式化URL”意味着从params创建一个url,那么url查看帮助器就是你的回答。您可以像在视图中一样在控制器中使用它,而不需要创建新的Zend_View实例 - 如果您使用的是视图渲染器,则在$this->view中有您的帮助器。所以

//in view
$this->url(array('controller' => 'index', 'action' => 'default'));

//in controller
$this->view->url(array('controller' => 'index', 'action' => 'default'));

但是如果你查看url视图助手的代码,你会看到它正在使用路由器对象来组装routes / url /。所以你需要的只是路由器对象,你可以通过几种方式获得它们,其中一些:

//in controller
$router = $this->getFrontController()->getRouter();
//anywhere
$router = Zend_Controller_Front::getInstance()->getRouter();
//and then
$router->assemble(array('controller' => 'index', 'action' => 'default'));

您还可以使用HelperBroker,从那里检索viewRenderer,检索视图并运行帮助方法。