在CakePHP中使用搜索表单时的漂亮URL

时间:2013-08-27 17:33:58

标签: php cakephp

目前,我已经设置了基本的搜索表单并正常工作。这是我认为的:

<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参数的唯一方法。

4 个答案:

答案 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后重定向。为什么?以下是四个主要原因:

  1. 它将允许您的用户更轻松地为搜索添加书签(阅读原因)
  2. 生成的网址更具可读性,即您想要实现的目标
  3. 更轻松地缓存搜索结果
  4. 重新加载速度更快(如果结果被缓存)
  5. 想知道如何实现它?请继续阅读...

    1. 如果您在表单上点击提交,则会将帖子发送到特定位置。该位置使用表单数据来标识searchterm。然后它将执行http重定向到第二个URL
    2. 第二个网址将根据您的要求而定。
    3. 看看这个,它让事情变得更加清晰。

      POST/REDIRECT/GET Pattern

      来源:http://www.phphatesme.com/blog/webentwicklung/postredirectget-pattern/ - 关于这个主题的德国文章。很抱歉热链接图片。