目前,我已经设置了基本的搜索表单并正常工作。这是我认为的:
<form action="/search" method="get" id="search">
<input type="text" name="q" placeholder="Enter search terms..."><input type="submit" value="Search">
</form>
我的动作只是执行以下操作:
$this->set('recipes', $this->paginate(array(
'Recipe.name LIKE' => '%' . $this->request->query('q') . '%'
)));
这会生成http://mysite.com/search?q=querystring
等网址。虽然这一切都很好,但我希望将URL作为http://mysite.com/search/querystring
的内容。
有没有办法实现这一点,但是在提交表单后不涉及重定向用户?如果这是我宁愿坚持使用$_GET
参数的唯一方法。
答案 0 :(得分:1)
使用路由http://book.cakephp.org/2.0/en/development/routing.html获取漂亮的网址。与.htaccess相关的另一个答案的缺点是,这在两个方向都不起作用。 CakePHP生成的URL不是一个漂亮的URL,因为它是生成它的php。
您尝试实施的内容is a pattern known as PRG。 CakeDC search plugin实现了这种模式,并使其易于使用。
您可以使用它,只需添加获取漂亮网址所需的路线。
答案 1 :(得分:0)
您可以将.HTACCESS文件设置为使用RewriteRule。
创建一个名为.htaccess的文件(点之前没有任何内容),并在里面放入以下内容:
RewriteEngine On
RewriteBase /
RewriteRule ^search/(.*)$ search.php?query=$1 [L]
前两行使用regexp配置引擎,第三行重定向/search/*
到/search.php?query=*
。 PHP永远不会对此有任何了解,这一切都是由Apache完成的。
答案 2 :(得分:0)
我会使用javascript / jquery来做这件事。我正在考虑这样的事情,虽然我没有测试过这个或任何东西。
$('#form').submit(function(e) {
e.preventdefault();
window.location.href = "http://mysite.com/search/" + encodeURIComponent($('#search').val());
});
答案 3 :(得分:0)
更好的方法是在POST后重定向。为什么?以下是四个主要原因:
想知道如何实现它?请继续阅读...
看看这个,它让事情变得更加清晰。
来源:http://www.phphatesme.com/blog/webentwicklung/postredirectget-pattern/ - 关于这个主题的德国文章。很抱歉热链接图片。