2012-06-13 67 views
2

我们有以下这些模块的Zend应用:Zend框架+整蛊控制器名称和模块名称冲突

Users 
Shop 
etc... 
Front - A content management module 

虽然前端模块具有以下控制器:

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模块后,“前”URI段被省略。

我完全明白这是为什么,但我们正在避免重命名Front模块下的所有控制器以避免冲突。

我的问题是,是否有办法指示URL视图帮助总是包括'前'模块URI段,即使它已被设置为默认的?

+0

可能需要添加自定义路由,至少对于前端模块。然后你对url view-helper的调用就变成像'$ this-> url(array(),'front-user-list')'这样的东西。一个确定的痛苦 - 添加路由并更改'url()'调用 - 但它将作为后备工作。 –

回答

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,应该已经正确地工作在第一位,因为你已经指定了默认模块。

+0

会试试这个。谢谢。 PS。 http://domain.com/users/list不会映射到'Front_UsersController :: listAction'。相反,它试图映射到一个不存在的'Users_ListController :: indexAction'。 –