2012-06-05 80 views
2

我有我的routes.php笨路線方法

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

我也有一個名爲ctrller1具有方法控制:

function method1 ($str = NULL) { 
    // do something 
} 

的問題是我要使用controller2 coz我不能或不應該編輯controller1。我想要的看似簡單,但顯然,CI不想和我一起工作。

當網址:
domain.com/ctrller1/method1/edit
被調用時,我想裏面ctrller1的方法被調用,如果domain.com/ctrller1/method1/videos/1
調用我想在ctrller2方法調用。

這一切似乎對我來說是正確的,但它不會工作。所以,我必須錯過一些東西。我試過把它加入到路由中:

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

但是這是不行的。有人在這裏看到任何錯誤?

回答

1

在任何時候,當你與路線的工作,就像權限(防火牆,等等)順序很重要。通常你想組織順序您的路線:

  1. 採用所定義
  2. 較少定義
  3. GENERAL /備用

爲了澄清,這意味着你的路由的順序應該是這樣的:

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

當調用URL時,路由表會經過並找到第一個最接近的匹配項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/12355method1似乎令人困惑。但是我再次沒有詳細的介紹。

希望對你有用,如果沒有評論,我會重新審視你的問題,如果你再澄清一點。

0

那麼你在一個地方有video而在另一個地方有videos

要麼改變

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

或嘗試網址:domain.com/ctrller1/method1/ 視頻/1

+0

Nah。這只是一個錯誤的問題。我檢查了我的代碼,一切似乎都是按順序的。 – rgin