【问题标题】:Yii: CMenu items for different moduleYii:不同模块的 CMenu 项
【发布时间】:2012-05-07 06:27:33
【问题描述】:

我想在 Layout 中创建一个菜单,其中的项目链接到其他不同的模块。

例如: 项目“产品”链接到产品模块中的操作,项目“服务”链接到服务模块中的操作。

当我设置'url'=>('product/<controllerID>/<actionID>')'url'=>('service/<controllerID>/<actionID>')时它不起作用,因为一旦我们进入产品模块并点击菜单“服务”,URL就会变成

index.php?r=product/service/<controllerID>/<actionID>

而不是

index.php?r=service/<controllerID>/<actionID>

这将是 404 错误。 (当然,因为服务模块不在产品模块中,但 URL 使它看起来像那样)。

有什么解决办法吗?

【问题讨论】:

  • 你可以为 cmenu 小部件显示你的台词吗?
  • 我已经展示了 'url' 关联数组的代码。我认为这是这个问题中最重要的代码部分。
  • 我只是想确保没有任何拼写错误,无论如何,我想我有一个解决方案,让我提出来。

标签: yii cmenu


【解决方案1】:

查看createUrl() 文档:

URL 路由。这应该是“ControllerID/ActionID”的格式。如果 ControllerID 不存在,则当前控制器 ID 将作为路由的前缀。如果路由为空,则假定它是当前操作。如果控制器属于一个模块,则模块 ID 将作为路由的前缀。 (如果您不需要模块 ID 前缀,则路由应以斜杠“/”开头。

最后一行告诉我们一切。对你来说最好的办法是用 / 开始所有路线:

'url'=>array('/<moduleID>/<controllerID>/<actionID>')

【讨论】:

  • 您检查解决方案了吗?它没有用吗?你需要澄清一下吗?
【解决方案2】:

检查一下

'url'=>$this->createUrl('/<moduleId>/<controllerID>/<actionID>')

【讨论】:

  • 不,它不起作用.. 到目前为止,我知道,CMenu 中与 'url' 关联的每个值都将传递给 CHtml::normalizeUrl,然后传递给 CController::createUrl()。所以会有双嵌套createUrl(),意思是404错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多