2013-05-07 99 views
1

對於我網站上的每位用戶,他們都有自己的資料頁面和文章列表。當用戶點擊其中一個列表項目時,會發生動畫,然後AJAX調用會顯示一個顯示文章的div。與此同時,我用一些JavaScript來強制URL變化來反映這一點:如何通過Codeigniter中的URL請求傳遞多個變量?

http://www.example.com/UserName/Hello-World-Article 

當用戶點擊瀏覽器中的後退按鈕,它調用javascript函數動畫回到列表視圖狀態。

到目前爲止這麼好。但讓我們說,用戶輸入上面的URL到他們的地址欄並按下輸入,這裏是問題:

如何將'UserName'和'Hello-World-Article'變量傳遞到Codeigniter並正確使用它們這種情況下?

回答

9

對不起,我對你的問題的措辭有點困惑,但我想我明白你在談論什麼。

第一張:閱讀Docs on Controllers。 Codeigniter文檔的岩石。

第二個: URI的路由直接控制器類名稱及其功能。

例如:

<?php 

    class Profile extends CI_Controller { 

     function item($username = NULL, $title = NULL) 
     { 
      if (is_null($username) || is_null($title)) redirect(base_url()); 

      // blah run code where $username and $title = URI segement 
     } 

    } 

這將產生此網址:

http://www.example.com/profile/item/username/whatever-i-want 

然後你可以在應用程序/配置/ routes.php文件使用路由刪除項目(docs):

$route['(:any)'] = 'profile/item/$1'; 

雖然更好的方法(預讀):

$route['profile/(:any)'] = 'profile/item/$1'; 

最後,這將創造你正在尋找的網址:

http://www.example.com/username/whatever-i-want 

//http://www.example.com/profile/username/whatever-i-want 

我可能需要仔細檢查這個語法錯誤,但它的笨路由是如何工作的基本知識。一旦你的URL設置成這樣,你就可以用JS來做任何你想做的事情。

然而,我強烈反對這種方法,因爲路由一類像這樣將幾乎呈現應用程序/網站無用的其餘部分,除非這是你唯一的控制器/功能(可能並非如此),你有。我認爲只要在這種或那種URL中擁有一個類名就會更好。

或者,如果您想以非常規方式跳過路由,也可以像使用index()和$ this-> uri-> segment()一樣使用。

<?php 

class Profile extends CI_Controller { 

    function index() 
    { 
     $username = $this->uri->segment(1); 
     $title = $this->uri->segement(2); 
    } 
} 

希望這是有道理的,並幫助您解決您的問題。

+0

謝謝!我正在使用替代方法。 – adrianmc 2013-05-11 12:29:17

+0

真的很好的答案! – 2015-07-23 14:12:16

0

怎麼樣只發送一個參數是分隔符分隔

url = http://www.example.com/UserName_title 

然後在你的控制器只是爆炸參數

class Profile extends CI_Controller { 

    function item($param = "") 
    { 
     if ($param == ""){ return false; } 

     $param = explode('_', $param); 
     $username = $param[0]; 
     $title = $param[1]; 
    } 
} 

有趣的部分是,您可以根據需要發送儘可能多的參數,而無需任何參數去技術。

PS:確保選擇分隔符明智的,這樣它不會在參數內容之一包括在內。