本文介绍了为什么 getMethod() 返回“GET"?而不是“POST"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标是提交一个带有两个单选按钮 (tipo) 和一个文本字段 (numero) 的 POST 表单,以便在我的数据库中进行查询并向用户显示数据.

我正在尝试提交下面的表单,但是当我提交表单时,遇到的请求是获取请求".表单在SupuestoConfig.html.twig"中:

<form id="configurador" action="{{ path('configsup') }}" method="POST"><p class="titulo_configurador">Elija supuesto penal:</p>{{ form_row(form.tipo) }}{{ form_row(form.numero, { 'label' : ' ', 'attr' : { 'class' : 'rec3' }}) }}{{ form_rest(form) }}<input type="submit" name="cargar" value="Cargar" class="inputbt"/></表单>

我在principal.html.twig"中渲染了之前的表单:

{{ render(controller('PprsBundle:Default:SupuestoConfig'), {'strategy': 'inline'}) }}

我的Controller.php":

/*** @Route("/pprs/principal/supuesto={numero_supuesto}", name="configsup")* @Template("PprsBundle:Default:SupuestoConfig.html.twig")*/公共函数 SupuestoConfigAction($numero_supuesto = null){$form = $this->createFormBuilder(null)->add('tipo', '选择', 数组('选择' =>大批('aleatorio' =>'Aleatorio','色情' =>'Por número'),'多个' =>错误的,'扩展' =>真的,'数据' =>'aleatorio'))//此添加可能包含错误->add('numero', 'text', array('label' => ' ','disabled' => true))->getForm();$peticion = $this->getRequest();echo ('<script type="text/javascript">alert("'.$peticion->getMethod().'");</script>');//返回'GET'if ($peticion->isMethod('POST')) {//Symfony2.2$form->bind($peticion);**$datos = $form->getData();***//foreach(array_keys($datos) as $p) {//echo ('<script type="text/javascript">alert ("'.$datos.'");</script>');//}*if ($form->isValid()) { ... }

在 Controller.php 中,尽管我有一个 GET 请求(当我删除该行时->add('numero', 'text',..我有一个 POST 请求,这是为什么?),在 getData 中我没有得到文本字段.

最后,我的routing.yml:

pprs_principal:模式:/pprs/principal/supuesto={numero_supuesto}/默认值:{_controller:PprsBundle:默认值:principal,numero_supuesto:1}_pprs_principal:模式:/pprs/校长/默认值:{ _controller:FrameworkBundle:重定向:重定向,路由:pprs_principal }

抱歉我的英语不好,提前致谢

1) 当我在 createFormBuilder 中添加文本字段时,有人知道为什么我获得的是 GET 请求而不是 POST 吗?

2) 有谁知道为什么我在调用 getData 时没有得到文本字段?

请帮帮我...

解决方案

也许这个答案可以帮到你:

getRequest() 返回GET";发布表单时

基本上,当渲染带有 {% render %} 标签的表单时,它实际上创建了另一个"请求......它不会传入语言环境、方法等.

我打开了一个关于此的错误,它按照设计进行:

https://github.com/symfony/symfony/issues/7551

The goal is to submit a POST form with two radiobuttons (tipo) and a text field (numero) to make a query in my DB and show the data to the user.

I am trying to submit the form below, however when I submit the form, the request coming accross is a 'GET REQUEST'. The form is in "SupuestoConfig.html.twig":

<div id="cuadro">
<form id="configurador" action="{{ path('configsup') }}" method="POST">
    <p class="titulo_configurador">Elija supuesto penal:</p>
        {{ form_row(form.tipo) }}
    {{ form_row(form.numero, { 'label' : ' ', 'attr' : { 'class' : 'rec3' }}) }}
        {{ form_rest(form) }}
    <input type="submit" name="cargar" value="Cargar" class="inputbt"/>
</form>
</div>

I render the previous form in "principal.html.twig":

{{ render(controller('PprsBundle:Default:SupuestoConfig'), {'strategy': 'inline'}) }}

My "Controller.php":

/**
     * @Route("/pprs/principal/supuesto={numero_supuesto}", name="configsup")
     * @Template("PprsBundle:Default:SupuestoConfig.html.twig")
     */
    public function SupuestoConfigAction($numero_supuesto = null)
    {
        $form = $this->createFormBuilder(null)
            ->add('tipo', 'choice', array(
                                    'choices' => array(
                                          'aleatorio' => 'Aleatorio',
                                          'pornumero' => 'Por número'),
                                    'multiple' => false,
                                    'expanded' => true,
                                    'data' => 'aleatorio'
         ))

         // This add may contains error
        ->add('numero', 'text', array('label' => ' ','disabled' => true))
     ->getForm();

     $peticion = $this->getRequest();


echo ('<script type="text/javascript">alert ("'.$peticion->getMethod().'");</script>');// Returns 'GET'

if ($peticion->isMethod('POST')) {
    // Symfony2.2
    $form->bind($peticion);

    **$datos = $form->getData();**


    *//foreach(array_keys($datos) as $p) {
    //echo ('<script type="text/javascript">alert ("'.$datos.'");</script>');
    //}*

    if ($form->isValid()) { ... }

In Controller.php, despite I´ve got a GET request (when I remove the line->add('numero', 'text',.. I´ve got a POST request, why is that?), in getData I don´t get the text field.

Finally, my routing.yml:

pprs_principal:
    pattern:  /pprs/principal/supuesto={numero_supuesto}/
    defaults: { _controller: PprsBundle:Default:principal, numero_supuesto: 1 }

_pprs_principal:
    pattern:  /pprs/principal/
    defaults: { _controller: FrameworkBundle:Redirect:redirect, route: pprs_principal }

Sorry for my bad english, Thanks in advance

Edit:

1) Anybody knows why I obtain a GET request instead of a POST when I add the text field in my createFormBuilder?

2) Anybody knows why Don't I get the text field when I call getData?

Help me please...

解决方案

Maybe this answer could help you out:

getRequest() returns "GET" when posting form

Basically, when rendering a form with a {% render %} tag, it actually creates "another" request... It doesn't pass in the locale, the method, etc.

I opened a bug about this, and it went as By Design:

https://github.com/symfony/symfony/issues/7551

这篇关于为什么 getMethod() 返回“GET"?而不是“POST"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 16:20
查看更多