Symfony 2基本GET表单生成的URL

Anc*_*end 9 forms url get formbuilder symfony

我一直试图用一个输入创建一个非常基本的symfony表单(用于搜索功能).它在提交时使用GET方法.它似乎按预期工作,但它会生成一个非常丑陋和不必要的长URL.我一直试图"清理"网址已经有一段时间了,我想知道是否有人遇到同样的问题而且知道如何修复它?

形成

$form = $this->createFormBuilder($search)
            ->setMethod('GET')
            ->add('q', 'text')
            ->add('search', 'submit')
            ->getForm();
Run Code Online (Sandbox Code Playgroud)

提交表单时会生成以下URL:

search?form[q]=red+apple&form[search]=&form[_token]=bb342d7ef928e984713d8cf3eda9a63440f973f2
Run Code Online (Sandbox Code Playgroud)

所需网址:

search?q=red+apple
Run Code Online (Sandbox Code Playgroud)

提前致谢!

hco*_*oat 17

要创建所需的URL,您必须使用createNamedBuilder哪个来设置表单名称''.要删除_token您需要设置csrf_protection为false.请查看csrf保护,以确保您知道如果关闭它会发生什么.

将代码更改为以下内容可以为您提供所需的结果.

$form = $this->get('form.factory')->createNamedBuilder('', 'form', $search, array(
            'csrf_protection' => false,
         ))->setMethod('GET')
           ->add('q', 'text')
           ->add('search', 'submit')
           ->getForm();
Run Code Online (Sandbox Code Playgroud)

这应该产生如下的URL:

search?q=red+apple&search=
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你想摆脱的&search=,一个办法是改变searchsubmitbutton.

->add('search', 'button')
Run Code Online (Sandbox Code Playgroud)

这将需要javascript来提交您的表单.这是jquery中的简单示例:

//This assumes one form and one button
$(document).ready(function(){
    $('button').click(function(){
        $('form').submit();
    });
});
Run Code Online (Sandbox Code Playgroud)

这将生成一个URL,如:

search?q=red+apple
Run Code Online (Sandbox Code Playgroud)

要访问GET变量,请在控制器中输入以下内容:

public function yourSearchAction(Request $request)
{
    // your code ...

    $form->handleRequest($request);

    if ($form->isValid()) {

        $getVars = $form->getData();

        $q = $getVars['q'];
        $page = $getVars['page'];
        $billing = $em

        //Do something

    }

    return //your code

}
Run Code Online (Sandbox Code Playgroud)

只是为了澄清您是否要添加page到您的URL,您需要将其添加到您的表单:

->add('page', 'text') 
Run Code Online (Sandbox Code Playgroud)

  • 要摆脱`&search =`你也可以创建你的表单而不用` - > add('search','submit')`并添加你自己的提交按钮`<button type ="submit"class ="btn btn - 默认">查找<`/按钮> (4认同)