Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Put方法以symfony形式提交的表单isSubmitted False_Symfony_Symfony Forms - Fatal编程技术网

使用Put方法以symfony形式提交的表单isSubmitted False

使用Put方法以symfony形式提交的表单isSubmitted False,symfony,symfony-forms,Symfony,Symfony Forms,我使用form.factory创建一个表单,并使用细枝渲染表单。在这种情况下,我必须使用PUT方法。我的代码是: 控制器: $builder = $this->get('form.factory')->createNamedBuilder(); $form = $builder ->add('id', HiddenType::class, array('data' => $id)) ->add('email', EmailType::class, a

我使用
form.factory
创建一个表单,并使用细枝渲染表单。在这种情况下,我必须使用
PUT
方法。我的代码是:

控制器:

$builder = $this->get('form.factory')->createNamedBuilder();
$form = $builder
    ->add('id', HiddenType::class, array('data' => $id))
    ->add('email', EmailType::class, array(
        'required' => false,
        'data' => count($res['result'][0]['email']) ? $res['result'][0]['email'] : '',
        'attr' => array('class' => 'form-control label_form_symfony'),
        'constraints' => array(
            new Email(array('message' => 'il campo Email non è valido'))
        )
    ))
    ->getForm();

$form->handleRequest($request);

if ($form->isSubmitted() && $request->isXmlHttpRequest()) {
    $data = $form->getData();

    if ($form->isValid()) {
        // save ...
    }
}
细枝模板:

{{ form_start(form,{'method':'PUT','attr':{action: path('update_xxx',{'id' : id})}}) }}
    {{ form_widget(form, {'attr' : {'class' : 'label_form_symfony' } } ) }}
    <button type="submit" class="submit_form btn btn-default">Save</button>
    <div id="feedback"></div>
{{ form_end(form) }}
更新 我补充说
$builder->setMethod('PUT')
在我的控制器中,并从我的小枝中删除
'method':'PUT'
,当我提交表单时,我收到此错误
此表单不应包含额外字段。
此问题是因为默认情况下,
handleRequest()
方法检查表单方法(已为表单配置)是否存在此问题等于请求方法。默认情况下,表单为
POST


只需使用
setMethod
函数即可
$builder->setMethod('PUT')
或者您也可以在表单类型类的默认选项中设置它。

使用
$builder->setMethod('PUT')
我有这个错误
这个表单不应该包含额外的字段。
因为您忘记了删除
——这是一个额外的字段。我没有添加
Symfony为我做这件事。现在我删除了
'method':'PUT'
表单细枝并添加了
$builder->setMethod('PUT')
,在我的Html中,我有
,因为是Symfony导致了这种错误(此表单不应包含额外字段),这意味着在验证时,您会得到比声明的字段更多的字段。至少您可以在表单选项中将
allow_extra_fields
设置为
true
(即,当您创建表单生成器时),我使用了自己的表单类型(例如,
AppBundle\updatexxtype
),然后在控制器中运行类似于
$form=$this->createForm(updatexxtype::class,newupdatexxmodel())。通常,您应该避免在控制器内部构建表单,因为如果它破坏了S.O.L.I.D。原则(控制器必须仅负责请求和响应处理)
<input type="hidden" name="_method" value="PUT">