Zend Framework + Tricky控制器名称和模块名称冲突

时间:2012-06-13 01:23:35

标签: zend-framework

我们有一个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段,即使它已经设置为默认值?

1 个答案:

答案 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应该在第一时间正确运行,因为你已经指定了默认模块。