有没有办法将元素添加到PRE_SUBMIT eventListner中的表单中的集合字段?
我有这个(form1):
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file',
'file',
array(
'data_class' => null,
'mapped' => false, //il campo non è mappato (il file non è blob ma sta su filesistem)
//'constraints' => new NotBlank(),
'render_required_asterisk' => true,
)
)
->add('name',
'text',
array(
'label' => 'Nome documento',
'required' => true,
'render_required_asterisk' => true,
'mapped' => 'name'
)
)
->add('document_category',
'entity',
array(
'property' => 'name', //valore da visualizzare nel form
'mapped' => 'document_category',
'class' => 'docliteBundle:Document\documentCategory', //Classe da dove deve prendere i dati
'multiple' => false, //E' possibile la selezione di un solo campo
'expanded' => false, //Per rendere un campo select
'empty_value' => 'Selezionare una categoria documento', //questo sarà impostato all'inizio ed identifica la voce vuoto
'label' => 'Categoria documento', //label del campo
'required' => true, //la selezione del campo è obbligatoria
'render_required_asterisk' => true, //visualizza asterisco di campo obbligatorio
)
)
->add('attributes_rel',
'collection',
array(
'type' => new documentAttributeRelType(),
'label' => false,
'mapped' => 'attributes_rel',
'allow_add' => true,
'show_legend' => false,
'allow_delete' => true,
)
);
documentAttributeRelType(form2):
$builder
->add('dynamic_attribute',
'entity',
array(
'property' => 'name',
'class' => 'docliteBundle:Document\dynamicAttribute',
'mapped' => 'dynamic_attribute',
'multiple' => false,
'expanded' => false,
'label' => 'Attributo',
'required' => true,
'constraints' => new NotBlank(),
)
)
->add('value',
'choice',
array(
'mapped' => 'value',
)
)
;
在Form1中定义了Listner:
$builder->get('attributes_rel')->addEventListener(
FormEvents::PRE_SUBMIT,
function(FormEvent $event){
$data = $event->getData();
$rel = array();
$rel['dynamic_attribute'] = '1';
array_push($data, $rel);
$event->setData($data);
});
但是这个添加元素没有映射,也没有出现在视图中:
{% for attribute in form.attributes_rel %}
<div data-attribute_row>
{{ form_row(attribute.dynamic_attribute) }}
{{ form_row(attribute.value) }}
</div>
{% endfor %}
答案 0 :(得分:1)
我认为你可以发现这对你的情况有用,如何在PRE_SUBMIT事件上操作字段选项:
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
$pageId = $data['page_id'];
$newOptions = $this->myManager->getPages();
// change form field
$form->add('page_id', 'choice', array(
'label' => 'Select a page',
'choices' => $newOptions,
'required' => true,
'placeholder' => 'Select a page',
'attr' => array('class' => 'form-control')
));
$form->getData()->setPageId($pageId);
});