2

我在我的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
调用 url: 时,我希望调用内部的方法ctrller1,如果domain.com/ctrller1/method1/videos/1
调用了我希望调用的方法ctrller2

这对我来说似乎都是正确的,但它不会起作用。所以,我一定是错过了什么。我尝试将其添加到路由中:

$route['ctrller1/method1/(edit)'] = 'ctrller1/method1/($1)';

但这是不行的。有人看到这里有什么问题吗?

4

2 回答 2

1

在您使用路由的任何时候,就像权限(防火墙等)一样,顺序很重要。通常,您希望按以下顺序组织您的路线:

  1. 最明确的
  2. 不太明确
  3. 一般/后备

澄清一下,这意味着您的路线顺序应该是这样的:

$route['ctrller1/method1/videos/view/(:num)'] = 'ctrller2/method3/$1';
$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';
$route['ctrller1/(:num)'] = 'ctrller2/method1/$1';

当 URL 被调用时,路由表会遍历并找到第一个最接近的匹配,否则它会遍历到下一个路由。

在这种情况下,您想要的是这样的:

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/12355or之类的东西ctrller1/videos/edit/12355,这method1似乎令人困惑。但同样,我在这里没有所有细节。

希望这对你有用,如果不发表评论,如果你再澄清一点,我会重新审视你的问题。

于 2012-06-05T13:09:50.523 回答
0

那么你有video一个地方和videos另一个地方?

要么更改为

$route['ctrller1/method1/videos/(:num)'] = 'ctrller2/method2/$1';

或尝试网址:domain.com/ctrller1/method1/video/1

于 2012-06-05T11:37:41.817 回答