0

我一直在努力解决路由问题,因此构建了一个小应用程序来摆弄,但我设法偶然发现了一个问题。

整个测试的目标是隐藏 url 'hostname/content/index/add' 并将其转换为像 'hostname/wms/content/add' 这样的用户更容易理解的 url。

但是现在由于某些奇怪的原因,我无法使用 $this->url() 方法进行重定向。但不知何故,像 somelink 这样的正常链接可以工作。

我在 application.ini 中构建了一些路由来测试它是如何工作的。没什么好看的...

resources.router.routes.contentroute.route = "/wms/content"
resources.router.routes.contentroute.defaults.module = content
resources.router.routes.contentroute.defaults.controller = index
resources.router.routes.contentroute.defaults.action = index

resources.router.routes.vacaturesroute.route = "/wms/vacatures"
resources.router.routes.vacaturesroute.defaults.module = vacatures
resources.router.routes.vacaturesroute.defaults.controller = index
resources.router.routes.vacaturesroute.defaults.action = index

所以当我输入hostname/wms/content 时,我会被重定向到内容模块的IndexController,它是IndexAction。这适用于我的视图中指向这样的内容模块的所有链接

<a href='wms/content/'> link </a>

但是,它不适用于 3 个链接,这些链接实际上重定向到该页面主机名/wms/内容上的 IndexController 的特定操作。

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add'));?>">Add new content</a>

我没有真正重定向到 IndexController 中的添加操作,而是重定向到主机名/wms/内容,这就是我来自的页面。

任何人都知道为什么会发生这种情况以及可能的解决方法?还是我完全以错误的方式接近这个?

4

2 回答 2

1

首先,您的路线是静态路线。您应该将它们替换为:

resources.router.routes.contentroute.route = "/wms/content/:action/*"
resources.router.routes.contentroute.defaults.module = content
resources.router.routes.contentroute.defaults.controller = index
resources.router.routes.contentroute.defaults.action = index

然后,您应该指定路由的名称并在 reset 参数中传递 true:

$this->url(
  array('module'=>'content', 'controller'=>'index','action'=>'add'), 
  'contentroute', 
  true
);
于 2012-04-25T08:23:06.147 回答
0

试试这个

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add','module'=>'xyz'),null,true);?>">Add new content</a>

将 xyz 替换为您的模块名称。

于 2012-04-25T07:36:12.700 回答