forms - Symfony 2基本GET表单生成的URL

标签 forms url symfony get formbuilder

我一直试图用一个输入创建一个极其基本的symfony表单(用于搜索功能)。提交时使用GET方法。它似乎按预期工作,但是它会生成一个非常丑陋且不必要的长URL。我已经尝试“清理” URL已有一段时间了,我想知道是否有人遇到相同的问题并且知道如何解决?

形式

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

在提交表单时,将生成以下URL:
search?form[q]=red+apple&form[search]=&form[_token]=bb342d7ef928e984713d8cf3eda9a63440f973f2

所需的URL:
search?q=red+apple

提前致谢!

最佳答案

要创建所需的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();

这将产生一个类似以下的URL:
search?q=red+apple&search=

编辑:

如果要摆脱&search=,一种方法是将searchsubmit更改为button
->add('search', 'button')

这将需要javascript来提交您的表单。
这是jquery中的简单示例:
//This assumes one form and one button
$(document).ready(function(){
    $('button').click(function(){
        $('form').submit();
    });
});

这将产生如下URL:
search?q=red+apple

要访问GET var,您可以在 Controller 中输入以下内容:
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

}

只是为了弄清楚是否要将page添加到URL中,您需要将其添加到表单中:
->add('page', 'text') 

关于forms - Symfony 2基本GET表单生成的URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308945/

相关文章:

javascript - 重定向到远程表单,填写并提交

javascript - 隐藏和显示表单(Angular JS)

java - 在 java 中使用 URL 类时处理 Cookie

java - Java 中完美的 URL 验证正则表达式

symfony - $这个对象在 Symfony2 的服务中使用时无法正常工作

php - Symfony - DateTime 类的对象无法转换为字符串

php - 从 mysql 数据库获取选项框的值

javascript - 在 JavaScript 中简单替换为用户输入

Java HTTP PUT 不发送数据

symfony - PHP 7 和 Doctrine Group 使用