2016-08-27 56 views
1

我目前正在學習codeigniter,但我遇到了一些路由問題。我的路線文件如下:CodeIgniter參數在路由中間

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

$route['images/(:num)/upload/'] = 'image/upload/$1'; 
$route['images/(:num)'] = 'image/index/$1'; 

$route['yoyo/(:num)'] = 'yoyo/view/$1'; 

$route['default_controller'] = 'yoyo'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 

我的問題是與第一條路線;如果沒有將(:num)移動到路徑的末尾,我無法使其工作。基於我瀏覽過stackoverflow後看到的其他路線,它會得到這樣的效果。有任何想法嗎?

所以,如果我添加了跟蹤路由,而不是僅僅是它的工作原理清楚:

$route['images/upload/(:num)/'] = 'image/upload/$1'; 
+0

您應該在更高的地方保留保留的路線。查看[docs](https://codeigniter.com/userguide3/general/routing.html#reserved-routes)(標記爲紅色)的最後一個引用:「保留的路由必須位於任何通配符或正則表達式路由之前。」 。 – Tpojka

+0

好點。沒有發現;我會銘記在心。 –

回答

0
$route['images/(:num)/upload/'] = 'image/$1/upload'; 

編輯:什麼是我thinking..sorry。

當然,你不能做我告訴你的代碼,因爲路線images/$1/upload意味着你將訪問控制器images ...和功能$1

顯然,你不能那樣做。這是你應該做的:

$route['images/upload/(:num)'] = 'image/upload/$1'; 


public class image extends CI_Controller 
{ 
    public function upload($arg0) {} 
} 

然後,如果你想通過更多的指定參數時,你只需要繼續路由路徑。

$route['images/upload/(:num)/(:any)'] = 'image/upload/$1/$2'; 

public function upload($arg0, $arg1) {} 
+0

我試過這樣: $ route ['images /(:num)/ upload /'] ='image/$ 1/upload'; ,不幸的是我仍然得到了404。 –

+0

@KimWard看到我的編輯。 – Linesofcode

+0

對,這是我工作的狀態。我只是希望能夠將參數放在路由中間,這是因爲我的構造函數檢查了URL的第2段中的一些黑客代碼。 –