能够以可移植的方式在控制器内部格式化URL(例如,用于JSON响应)会很好。是否有一种简单的方法可以在不首先创建Zend_View
实例的情况下执行此操作?
答案 0 :(得分:2)
这里有几点想法:
即使您正在生成JSON响应,您仍然可以通过ContextSwitch and AjaxContext动作帮助程序使用视图对象和视图脚本。
即使您没有使用视图脚本作为响应,您可能已经在Bootstrap中实例化了视图。因此,在控制器中,您实际上不会像访问那样创建视图。所以没有额外的开销。
如果“便携式”是指“跨项目”,那么可能是行动助手?将它放入另一个项目,配置帮助路径,你就可以了。如果“可移植”是指“更了解应用程序的路由”,那么您可能会使用视图对象。
答案 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,检索视图并运行帮助方法。