2012-07-11 138 views
4

我正在用Codeigniter製作一個教程系統,但我在教程中使用子類別有點困難。Codeigniter可變長度參數列表

的URL結構是這樣的:/教程/測試/ 123 /這-是-A-教程

  • 教程是控制器
  • 試驗是類
  • 123一短碼是教程ID(在SQL查詢中使用)
  • 這-is-a的教程僅僅是一個蛞蝓美化

我做的是通過貓的網址egory作爲第一參數和ID作爲第二個參數,以我的控制器功能:

public function tutorial($category = NULL, $tutorial_id = NULL); 

現在,如果我想子類別(無限深度),如:/教程/測試/ TEST2/123 /另一個教程。我將如何實現這一點?

謝謝!

回答

6

對於閱讀無限參數,你至少有兩個有用的工具:

所以在你的控制器中:

  • 流行音樂的最後一段/參數(這是你塞,沒必要)
  • 假設最後一個參數是教程ID
  • 假設其餘均爲類別

事情是這樣的:

public function tutorial() 
{ 
    $args = func_get_args(); 
    // ...or use $this->uri->segment_array() 

    $slug = array_pop($args); 
    $tutorial_id = array_pop($args); // Might want to make sure this is a digit 

    // $args are your categories in order 
    // Your code here 
} 

其餘的代碼和驗證取決於你想要做什麼具體的參數。

+0

謝謝,那就是我一直在尋找的。 – EsTeGe 2012-07-11 15:00:09

+1

在PHP 5.6+中,您可以使用...標記。像:function sum(... $ numbers){foreach($ numbers as $ n)php.net/manual/en/functions.arguments.php – 2014-08-21 03:15:32

0

如果你需要的變量類型,你可以使用URI類:$this->uri->uri_to_assoc(n)

+0

這些類別是動態的,也從數據庫中提取。 – EsTeGe 2012-07-11 14:46:40

0

另一個可能需要考慮的選項是CodeIgniter的控制器函數重新映射功能,您可以使用它重寫默認行爲。您將能夠在控制器內部定義一個單獨的函數,該函數將處理對該控制器的所有調用,並將剩餘的URI參數作爲數組傳遞。然後你可以隨心所欲地做任何事情。

請參閱here以獲取有關此問題的文檔參考。

+0

這看起來也很有趣。我可能會將其用於我想要的其他內容。 – EsTeGe 2012-07-12 12:21:58