2
symfonyのドキュメントhttp://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-formsに従って、依存フォームの動的生成を行いました。symfony送信されたフォームの動的生成が機能しない
型クラス:
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>
私は、文書の手順に従ってくださいと思います。しかし、outFieldでは、常に選択するものはありません。誰かが間違っていることを指摘できますか?本当にありがとう。
多分私はJavaScriptが動作していないと思われますか?私はこれに新しい、いくつかの助けていただきありがとうございます。 –
問題を把握しましたか?私は別の問題を抱えています。 'Catchable Fatal Error:AcmeBundle \ Form \ ScheduleType :: PIE10Bundle \ Form \ {closure}()に渡される引数1は、AcmeBundle \ Form \ Symfony \ Component \ Form \ Formのインスタンスでなければなりません。 \ Formに与えられ、/var/www/Acme/api/src/AcmeBundle/Form/ScheduleType.phpで61行目に呼び出され、 ' は何か考えていますか? – inckka