2

问题是如何创建诸如 hpp://localhost/search/{searchString} 这样的路由

我玩过但是...

简单的形式是(树枝)

<form  class="form-search" action="{{ path ('site_search') }}" method="get">
    <input type="text" name="string" value="{% trans %}Search{% endtrans %}..."/>
</form>

路线是

site_search:
    pattern:  /search/{string}
    defaults: { _controller: MainSiteBundle:Search:default, string: null }
    methods: [GET]

现在我得到这样的网址http://local.site/search?string=some但我想得到http://local.site/search/some

或者 _GET form url 的最佳解决方案是什么?

4

1 回答 1

1

这就是 html 的工作方式.. form 方法get将附加?inputname=inputvalue并且post将向给定的操作 url 发送一个 post 请求。(但不要将某些内容附加到/inputvalue之类的操作中)

您可以使用 javascript 动态更改表单操作或在您的网络服务器配置中使用 RewriteRule 以实现您正在寻找的内容。

在我看来,url 重写可能是更好的选择。直接访问 /search/term 的用户不会被重定向,提交表单的用户将因此在他们的浏览器中看到正确的 url。

为什么不直接使用method="post"并在您的操作中将用户重定向到/search/term

public function searchAction($string = null, Request $request)
{
    if ( !($request->get('string') && !($string) ) {
         // ... render your form here 

         // return form
    }

    // ... perform search here 
    // return search results
}

这就是通常使用表单实现搜索的方式。发布搜索词被重定向到结果。

于 2013-06-13T19:22:38.810 回答