2012-07-03 29 views
0

我嘗試了很多方法來解決這個問題,但都沒有成功。Codeigniter忽略多個段的中間段

假設我有一個類:

class MyTestClass{ 
    function testPrint($a = '', $b = '', $c = '') 
    { 
     echo '1: ' . $a . ', 2: ' . $b . ', 3: ' . $c;   
    } 
} 

,如果我用這個網址 http://localhost/ci/index.php/myTestClass/testPrint/a/b/c訪問此功能,您將看到1: a, 2: b, 3: c作爲輸出,它的罰款。

但如果我給你$ B爲空字符串,該網址將變更爲http://localhost/ci/index.php/myTestClass/testPrint/a//c

輸出將變爲1: a, 2: c, 3:看來CI忽略缺少的參數。

問題是如何防止CI忽略uri中間缺少的參數?

我對剛纔的URL預期輸出是1: a, 2: , 3: c

順便說一句,我試圖用$this->uri->segment(n)以確保參數的位置,但它不工作。

我試圖通過添加更新routes.php文件:

$route['myTestClass/(:any)/(:any)/(:any)/(:any)'] = "myTestClass/$1/$2/$3/$4";但是這不會改變任何東西。

有什麼想法?

+1

我不確定這是一個CI問題,我會猜測瀏覽器和/或網絡服務器。如果我輸入URL http://stackoverflow.com//questions//11310801//codeigniter-ignores-the-middle-segment-from-multiple-segments我會看到這個頁面。 CI「看到」的可能性很可能是「http:// localhost/ci/index.php/myTestClass/testPrint/a/c」 – danneth

+0

生成URL時,是否可以不設置'$ b'的缺省值params),說0或'null'這個詞?路線是最有意義的,但有很多情況下需要迎合! – cchana

+0

@cchana它不是CI的問題,它的瀏覽器如何解釋鏈接。您可能需要考慮將代碼修改爲類似於/ 0/c的代碼,即您對「b」有某種類型的輸入。你可以爲if($ b == 0)$ b ='';'執行if語句,如果你真的需要它是空白的。 –

回答

0

我不確定這是否可以在你的情況下,但我會做的是使用一個短的虛擬字符串(本例中爲xyz),以防止必須處理/ /然後將其過濾掉。

http://localhost/ci/index.php/myTestClass/testPrint/a/xyz/c

if ($b == 'xyz') 
{ 
    $b = '' 
} 

如果有可能,儘量POST-ING變量,而不是使用URI段。這會讓事情變得更容易。 希望這有助於。

更新:

既然你不能發表,怎麼樣enabling query strings

+0

謝謝。但是,如果'xyz'是一個用戶輸入值,這將不起作用:)實際上,url是由移動設備調用的,而不是網頁調用的,這就是爲什麼我不能使用POST。 – qkzhu

+0

嗯,啓用查詢字符串是我的新東西,讓我先嚐試。謝謝:) – qkzhu