2010-01-03 143 views
2

不知道這是否可以完成,但似乎我的主要問題是因爲我有一個默認路由到一個名爲「索引」的方法。我希望能夠列出所有標記了特定關鍵字的用戶。另外,用戶可以根據這些關鍵字搜索其他用戶。Codeigniter:將表單變量傳遞給URI

即 www.domain.com/tags/apples www.domain.com/tags/oranges www.domain.com/tags/blueberry

它工作正常,如果我手動去的URL。我有問題讓它與表單域一起工作。

片段的form_open的:

<?=form_open('tags/');?> 

<p>Search for Tag: <input type="text" name="tag" /></p>  
<p><input type="submit" value="Search" /></p> 

這裏是我的控制器的一個片段:

function index() { 
    $data['result'] = $this->tags_model->searchByTag($this->uri->segment(2)); 
    $this->load->view('tags_view', $data); 
} 

這裏是我的路由器的一個片段:

$route['tags'] = "tags/index"; 
$route['tags/(:any)'] = "tags/index/$1"; 

現在,我可以很容易地解決所有這一切,如果我有一個稱爲搜索的方法,但我不希望URL顯示爲www.domain.com/tags/search/橙子。

回答

0

我最終重定向了URL並將關鍵字傳遞給URI。

即domain.com/tags/view/

5

當您創建表單時,您將其設置爲使用POST變量而不是GET,這樣他們就不會通過url,這是codeigniter對錶單的默認方法。如果你希望他們通過URL得到不過,打電話的形式揭幕戰這種方式,而不是

<form method="post" action="tags/" /> 

form_open('tags/', array('method' => 'get')); 

這同樣適用於

所以你form_open代碼會生成以下代碼您希望爲表單指定的任何其他屬性,只需在數組內使用相同的模式attribute_name => attribute_value即可。在user guide

+0

好吧,這似乎做以下... 標籤?標籤=橙...我怎麼得到這「改寫?」 – luckytaxi 2010-01-03 21:54:10

+0

$ route ['tags?tag =(:any)'] =「tags/$ 1」;應該工作 – johnnyArt 2010-01-03 21:56:06

+0

我得到一個404頁面無法找到。 ughhhh – luckytaxi 2010-01-03 21:58:01

0

在這裏問題

更多信息是,你的形式將其提交的所有數據爲「/標籤」,什麼也沒有尾隨它,POST數據不會來作爲URL的一部分。不過,即使它是GET請求,我也不認爲CodeIgniter會將查詢字符串中的任何內容都作爲路由段的一部分使用。

我認爲你應該做的是有一個小的Javascript函數,當選擇值改變時,它會自動更新表格action參數爲tags/<select option value>。這樣它會提交到正確的地方。爲了處理未啓用JavaScript的瀏覽器,您可以使用默認操作,稱爲tags/search,只需分析您的表單數據,一旦找出答案,就會將301重定向到正確的tags/<location>

然而,這似乎有點矯枉過正,因爲你真的可以將表格指向tags/index而不用擔心它。我不確定搜索引擎索引表單提交位置,即使他們確實如此,他們當然也不會按照您希望的方式對提交給動態URI的表單進行索引。您仍然可以使用tags/apples等鏈接到搜索結果頁面,但只要前往tags/index,表單就可以正常工作。