我们有一个Zend应用程序,它包含以下模块:
Users
Shop
etc...
Front - A content management module
虽然Front模块具有以下控制器:
UsersController
ShopController
AuthController
etc...
在我们的开发周期中,我们决定将Zend应用程序的默认模块设置为Front模块,但是无意中断了我们的链接,因为http://domain.com/front/users/list现在生成为http://domain.com/users/list,这是现在指的是错误的行动。
我们使用URL视图助手(即$this->url(array('module' => 'front', 'controller' => 'users', 'action' => 'list'));
)生成链接,但由于将默认模块切换到Front模块,因此省略了“front”URI段。
我完全理解为什么会这样,但我们避免重命名Front模块下的所有控制器以避免冲突。
我的问题是,有没有办法指示URL视图助手总是包含'前'模块URI段,即使它已经设置为默认值?
答案 0 :(得分:1)
我的问题是,是否有一种方法可以指示URL视图助手 总是包括前面的'模块URI段,即使它已经存在 设为默认值?
您可以使用相同的名称创建自己的url视图助手,并覆盖默认的url视图助手将其添加到引导程序中的Zend_View对象。
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (null === $viewRenderer->view)
{
$viewRenderer->initView();
}
$view = $viewRenderer->view;
$view->addHelperPath('/path/to/some/helpers', 'My_View_Helper');
现在创建类My_View_Helper_Url让它扩展Zend_View_Helper_Url覆盖url方法。 以下是关于此程序的参考表格ZF doc
事实上,你可以"堆叠"使用addHelperPath()方法的路径。如 你添加路径到堆栈,Zend_View将查看 最近添加的请求帮助程序类的路径。这允许 您要添加(或甚至覆盖)助手的初始分布 与您自己的自定义助手。
我说我认为http://domain.com/users/list应该在第一时间正确运行,因为你已经指定了默认模块。