我一直试图绕过路由,因此建立一个小的应用程序来摆弄,但我设法偶然发现了一个问题。
整个测试的目标是隐藏网址'hostname / content / index / add'并将其转换为更易于理解的网址,例如'hostname / wms / content / add'。
但是现在由于一些奇怪的原因我不能使用$ 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>
然而,对于实际重定向到该页面主机名/ wms / content上的IndexController的特定操作的3个链接,它不起作用。
<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add'));?>">Add new content</a>
而不是实际重定向到IndexController中的add动作,我被重定向到hostname / wms / content,这是我正在来的页面。
任何人都知道为什么会这样,可能还有办法解决这个问题?或者我完全接近这个错误的方式?
答案 0 :(得分: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
);
答案 1 :(得分:0)
试试这个
<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add','module'=>'xyz'),null,true);?>">Add new content</a>
将xyz替换为您的模块名称。