2009-12-26 60 views
-1

可能重複:
CodeIgniter Routing爲什麼CodeIgniter不傳遞變量?

什麼應該發生:用戶導航到URI,routes.php文件抓住國家,並將其發送到控制器,控制器返回從一些信息數據庫查詢。很基本的東西。

問題:URI沒有將變量傳遞給控制器​​。我被告知

缺少參數1各國:: state_summary

我可以設置該函數的參數默認值,即($ st ='阿拉巴馬'),一切正常。

我什至不知道這是如何可能的。也許至少告訴我需要測試什麼來追蹤錯誤。

URI:

http://example.com/index.php/states/Alabama 

routes.php文件:

$route['states/(.*)'] = "states/state_summary/$1"; 

國控制器:

... 

function state_summary($st) 
{ 
// DB query 
// Return data 
} 

... 
+0

如果給$默認值會發生什麼? 'state_summary($ st =「Alabama」)' – Sampson 2009-12-26 04:28:45

+0

[你必須看到這個。謝謝:))(http://stackoverflow.com/questions/1288258/codeigniter-routing) – Sarfraz 2009-12-26 06:11:29

回答

0

我相信你的路由應該被調整到:

$route['states/(:any)'] = "states/state_summary/$1"; 

這對我有效。 我不確定(。*)是否有效,因爲我從未見過它。

+0

'(。*)'是一個有效的正則表達式。 – 2009-12-26 06:23:24

+0

啊,當然。那麼,正如我所說,上面的路線爲我工作。你試過了嗎? – Trae 2009-12-28 02:44:56

+0

泰勒,你在哪裏放置路線?也許這與它有關。根據routes.php中的註釋 「保留的路由必須位於任何通配符或正則表達式路由之前。」 – Trae 2009-12-29 06:12:22

0

嗯,我從來不寫控制器具有參數,而不是我用rsegment方法:

... 

function state_summary() 
{ 
    $st = trim($this->uri->rsegment(3)); 
    // DB query 
    // Return data 
} 
... 

有了這個,我有一個傳遞的參數更多的控制。在將其傳遞給模型或庫之前,我可以使用trim或intval來對其進行消毒。

此外,codeigniter核心庫中有關於路由URL的一些調整。在文件system/libraries/Router.php中看到它,圍繞第278行的function _parse_routes()中的代碼。它是如何在CI中工作的URI路由。

相關問題