0

目前我有一个基本的搜索表单设置和工作。这在我看来:

<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') . '%'
)));

这会导致 URL 像http://mysite.com/search?q=querystring. 虽然这一切都很好,但我希望将 URL 作为http://mysite.com/search/querystring.

有没有一种方法可以在用户提交表单后不涉及重定向用户?如果这是我宁愿坚持使用$_GET参数的唯一方法。

4

4 回答 4

1

对漂亮的 URL使用路由http://book.cakephp.org/2.0/en/development/routing.html。您使用 .htaccess 获得的另一个答案的缺点是这不会双向工作。CakePHP 生成的 URL 不会是一个漂亮的 URL,因为它是 php 生成的。

您尝试实现的是一种称为 PRG 的模式。CakeDC搜索插件实现了该模式并使其易于使用。

您可以使用它并添加获取漂亮 URL 所需的路由。

于 2013-08-27T18:36:49.970 回答
0

您可以设置 .HTACCESS 文件以使用 RewriteRule。

创建一个名为 .htaccess 的文件(点之前没有任何内容)并在其中放入以下内容:

RewriteEngine On
RewriteBase /
RewriteRule ^search/(.*)$ search.php?query=$1 [L]

前两行配置引擎,第三行重定向/search/*/search.php?query=*使用正则表达式。PHP 永远不会对此一无所知,这一切都是由 Apache 完成的。

于 2013-08-27T17:40:23.477 回答
0

我会使用 javascript/jquery 来做到这一点。我在想这样的事情,虽然我没有测试过这个或任何东西。

$('#form').submit(function(e) {
    e.preventdefault();
    window.location.href = "http://mysite.com/search/" + encodeURIComponent($('#search').val());
});
于 2013-08-27T17:45:15.790 回答
0

一个更好的方法是在 POST 之后进行重定向。为什么?以下是四个主要原因:

  1. 它将允许您的用户更轻松地为搜索添加书签(请继续阅读)
  2. 生成的 url 更具可读性,即您想要实现的目标
  3. 更容易缓存搜索结果
  4. 重新加载要快得多(如果结果被缓存)

想知道如何实现吗?继续阅读...

  1. 如果您在表单上点击提交,它将是一个特定位置的帖子。该位置使用表单数据来识别搜索词。然后它会做一个 http 重定向到第二个 url
  2. 第二个网址将根据您的要求。

看看这个,它使事情更清楚。

POST/REDIRECT/GET 模式

来源:http ://www.phphatesme.com/blog/webentwicklung/postredirectget-pattern/ - 关于这个主题的好德语文章。抱歉盗用图片。

于 2013-08-27T18:45:45.840 回答