表单绑定不起作用获取请求
form binding not working get request
这是我的 symfony 表单
class TeradataType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('emplId','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('tmMbrUid','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('fstNm','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('lstNm','text',array(
'attr'=>array(
'class'=>'filter-control'
)
));
}
public function getName(){
return '';
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'csrf_protection' => false
));
}
}
这是我打印初始表格的方式:
{{ form_start(form, {'action':path('teradataResult'),'method':'GET','attr': {'novalidate': 'novalidate','id':'form','class':'form-horizontal'}}) }}
{{ form_widget(form) }}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-warning">Clear</button>
</div>
</div>
{{ form_end(form) }}
这是我的控制器class:
$form= $app['form.factory'] ->createBuilder(TeradataType::class)
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
var_dump($form->getData());
}
当我使用 POST 请求提交表单时,我得到了表单数据和表单绑定,但是当我使用 GET 请求时,我没有得到任何表单数据。如何解决这个问题?
更新:
我替换了这行代码:
$form->handleRequest($request);
和
$form->submit($request);
它也适用于 get 请求。但根据文档 $form->submit($request) 已弃用并将在 symfony 3 (http://symfony.com/doc/current/cookbook/form/direct_submit.html#passing-a-request-to-form-submit-deprecated)
中删除
您可以在调用createBuilder()
时添加setMethod('GET')
。这应该可以解决问题:
$form = $app['form.factory']->createBuilder(TeradataType::class)
->setMethod('GET')
->getForm();
这是我的 symfony 表单
class TeradataType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('emplId','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('tmMbrUid','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('fstNm','text',array(
'attr'=>array(
'class'=>'filter-control'
)
))
->add('lstNm','text',array(
'attr'=>array(
'class'=>'filter-control'
)
));
}
public function getName(){
return '';
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'csrf_protection' => false
));
}
}
这是我打印初始表格的方式:
{{ form_start(form, {'action':path('teradataResult'),'method':'GET','attr': {'novalidate': 'novalidate','id':'form','class':'form-horizontal'}}) }}
{{ form_widget(form) }}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" class="btn btn-warning">Clear</button>
</div>
</div>
{{ form_end(form) }}
这是我的控制器class:
$form= $app['form.factory'] ->createBuilder(TeradataType::class)
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
var_dump($form->getData());
}
当我使用 POST 请求提交表单时,我得到了表单数据和表单绑定,但是当我使用 GET 请求时,我没有得到任何表单数据。如何解决这个问题?
更新: 我替换了这行代码:
$form->handleRequest($request);
和
$form->submit($request);
它也适用于 get 请求。但根据文档 $form->submit($request) 已弃用并将在 symfony 3 (http://symfony.com/doc/current/cookbook/form/direct_submit.html#passing-a-request-to-form-submit-deprecated)
中删除您可以在调用createBuilder()
时添加setMethod('GET')
。这应该可以解决问题:
$form = $app['form.factory']->createBuilder(TeradataType::class)
->setMethod('GET')
->getForm();