2010-01-03 147 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,表单就可以正常工作。