我在routes.php
:
$route['ctrller1/method1/video/(:num)'] = 'ctrller2/method2/$1';
我还有一个名为ctrller1
的控制器,它有一个方法:
function method1 ($str = NULL) {
// do something
}
问题是我必须使用controller2因为我不能或不应该编辑controller1。我想要的看似简单,但显然,CI不想和我合作。
当网址:
domain.com/ctrller1/method1/edit
调用,我希望调用ctrller1
内的方法,如果domain.com/ctrller1/method1/videos/1
被调用我希望调用ctrller2
中的方法。
这对我来说似乎都是正确的,但它不起作用。所以,我必须遗漏一些东西。我已经尝试将其添加到路由中:
$route['ctrller1/method1/(edit)'] = 'ctrller1/method1/($1)';
但这是不行的。有人在这里看错了吗?
答案 0 :(得分:1)
在您使用路线的任何时候,就像权限(防火墙等)订单一样重要。通常,您希望按以下顺序组织路线:
澄清一下,这意味着您的路线订单应该是这样的:
$route['ctrller1/method1/videos/view/(:num)'] = 'ctrller2/method3/$1';
$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
$route['ctrller1/(:num)'] = 'ctrller2/method1/$1';
当调用URL时,路由表会经过并查找FIRST最接近的匹配,ELSE会遍历到下一个路径。
在这种情况下你想要的是这样的:
domain.com/ctrller1/method1/videos/1
domain.com/ctrller1/method1/edit
理由是,视频的路线更具体,也是特殊情况,因为您将其路由到幕后的另一个控制器。
以下是您的路线应该是什么样的(未经测试,但应该是它):
$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
$route['ctrller1/method1/edit'] = 'ctrller1/method1';
作为一方,请注意,我很好奇为什么要格式化它ctrller1/method1/videos/
而不是ctrller1/videos/view/12355
或ctrller1/videos/edit/12355
,method1
似乎令人困惑。但我再也没有详细说明。
希望这对您有用,如果没有评论,如果您再澄清一下,我会重新审视您的问题。
答案 1 :(得分:0)
嗯,你在一个地方有video
,在另一个地方有videos
吗?
改为
$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
或尝试网址:domain.com/ctrller1/method1/ 视频 / 1