不确定是否可以这样做,但似乎我的主要问题是因为我有一个名为“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。
答案 0 :(得分:5)
当您创建表单时,将其设置为使用POST
变量而不是GET
,这样他们就不会通过url,这是codeigniter的表单默认方法。
因此,您的form_open代码将生成以下代码:
<form method="post" action="tags/" />
如果你想让他们通过url,请改为以这种方式打开表单:
form_open('tags/', array('method' => 'get'));
这同样适用于您要为表单指定的任何其他属性,只需遵循数组中相同的模式attribute_name => attribute_value
。
答案 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 /