Php 提交表单的symfony动态生成不起作用
我遵循symfony文档为相关表单进行动态生成 类型类别:Php 提交表单的symfony动态生成不起作用,php,forms,symfony,doctrine,Php,Forms,Symfony,Doctrine,我遵循symfony文档为相关表单进行动态生成 类型类别: class EtlType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $b
class EtlType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('outTable', EntityType::class, array(
'class'=>'TableBundle:TableList',
'placeholder' => '',
'choice_label'=>'tableName',
'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:10px; width:180px')));
$formModifier = function (FormInterface $form, TableList $tableList = null) {
$fields = null === $tableList ? array() : $tableList->getFields();
$form->add('outField', EntityType::class, array(
'class' => 'TableBundle:TableDesc',
'placeholder' => '',
'choices' => $fields,
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
$data = $event->getData();
$formModifier($event->getForm(), $data->getOutTable());
}
);
$builder->get('outTable')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$outTable = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $outTable);
}
);
}
}
细枝模板:
{{ form_start(form) }}
{{ form_row(form.outTable) }}
{{ form_row(form.outField) }}
{{ form_widget(form) }}
<input class="button button1 right" type="submit" value="Create" onclick="return confirm('Confirm Creation?')"/>
{{ form_end(form) }}
<script>
var $outTable = $('#etl_outTable');
$outTable.change(function() {
// ... retrieve the corresponding form.
var $form = $(this).closest('form');
// Simulate form data, but only include the selected outTable value.
var data = {};
data[$outTable.attr('tableName')] = $outTable.val();
// Submit data via AJAX to the form's action path.
$.ajax({
url : $form.attr('action'),
type: $form.attr('method'),
data : data,
success: function(html) {
// Replace current position field ...
$('#etl_outField').replaceWith(
// ... with the returned one from the AJAX response.
$(html).find('#etl_outField')
);
}
});
});
</script>
{{form_start(form)}
{{form_row(form.outTable)}
{{form_row(form.outField)}
{{form_widget(form)}
{{form_end(form)}}
var$outTable=$('etl#u outTable');
$outTable.change(函数(){
//…检索相应的表单。
var$form=$(this).closest('form');
//模拟表单数据,但仅包括选定的输出表值。
变量数据={};
数据[$outTable.attr('tableName')]=$outTable.val();
//通过AJAX将数据提交到表单的操作路径。
$.ajax({
url:$form.attr('action'),
类型:$form.attr('method'),
数据:数据,
成功:函数(html){
//替换当前位置字段。。。
$('etl#U外场')。替换为(
//…使用从AJAX响应返回的一个。
$(html).查找(“#etl_outField”)
);
}
});
});
我想我遵循了文件中的步骤。但对于外场来说,它总是没有什么可选择的。有人能指出哪里出了问题吗?非常感谢。您没有提交完整的表格。试试这个:
$outTable.change(function() {
// ... retrieve the corresponding form.
var $form = $(this).closest('form');
// Simulate form data, and include the whole form.
var data = new FormData($form);
// Submit data via AJAX to the form's action path.
$.ajax({
url : $form.attr('action'),
type: $form.attr('method'),
data : data,
success: function(html) {
// I'd rather replace the whole form
$('#etl_outField').replaceWith(
// ... with the returned one from the AJAX response.
$(html).find('#etl_outField')
);
}
});
});
也许我认为JavaScript不起作用了?我是新手,希望能帮上忙谢谢。你解决问题了吗?我有另一个问题<代码>可捕获的致命错误:传递给AcmeBundle\Form\ScheduleType::PIE10Bundle\Form\{closure}()的参数1必须是AcmeBundle\Form\Symfony\Component\Form\Form的实例,给定的Symfony\Component\Form\Form的实例,在第61行的/var/www/Acme/api/src/AcmeBundle/Form/ScheduleType.php中调用并定义了你知道吗?我遇到了一个问题,如果我遵循文档,我会出错,因为并非所有数据都已发送。如果我使用此解决方案(全部发送),一切正常。