2

我们有一个包含以下模块的 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 段,即使它已经设置为默认值?

4

1 回答 1

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应该首先正常工作,因为您已将默认模块指定为前面。

于 2012-06-13T06:40:57.400 回答