Codeigniter:将表单变量传递给URI

时间:2010-01-03 21:44:31

标签: codeigniter

不确定是否可以这样做,但似乎我的主要问题是因为我有一个名为“index”的方法的默认路由。我希望能够列出标有特定关键字的所有用户。此外,用户可以根据这些关键字搜索其他用户。

即。 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"; 

现在,如果我有一个名为search的方法,我可以轻松解决所有问题,但我不希望该URL显示为www.domain.com/tags/search/orange。

3 个答案:

答案 0 :(得分:5)

当您创建表单时,将其设置为使用POST变量而不是GET,这样他们就不会通过url,这是codeigniter的表单默认方法。

因此,您的form_open代码将生成以下代码:

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

如果你想让他们通过url,请改为以这种方式打开表单:

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

这同样适用于您要为表单指定的任何其他属性,只需遵循数组中相同的模式attribute_name => attribute_value

有关user guide

的更多信息

答案 1 :(得分:0)

这里的问题是你的表单将把它的所有数据提交到“/ tags”,没有任何结尾,因为POST数据不是作为URL的一部分。即使它是GET请求,我也不认为CodeIgniter会从查询字符串中取出任何内容并将其用作路由段的一部分。

我认为您应该做的是使用一个小的Javascript函数,只要更改选择值,它就会自动将表单action参数更新为tags/<select option value>。这样它就会提交到正确的地方。为了处理非JavaScript启用的浏览器,您可以使用一个名为tags / search的默认操作,只需分析您的表单数据,并在您想出它后将301重定向到正确的tags/<location>。< / p>

然而,这似乎有点过分,因为你可以真正指出tags/index的形式而不用担心它。我不确定搜索引擎索引表单提交位置,即使他们这样做,他们肯定也不会索引以您希望的方式提交到动态URI的表单。您仍然可以使用tags/apples等链接到搜索结果页面,但只需转到tags/index,表单就可以正常工作。

答案 2 :(得分:0)

我最终重定向了URL并将关键字传递给了URI。

即。 domain.com/tags/view /