Есть ли способ добавить элемент в поле коллекции в форме в eventListner PRE_SUBMIT?Элемент добавления Symfony для формирования коллекции в событии PRE_SUBMIT
У меня это (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 определяется Читающий мысли:
$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 %}
Да, и, как вы уже, кажется, знают, что вам нужно событие PRE_SUBMIT, я полагаю, что вы на самом деле зациклились на чем-то более конкретном? Прочитано http://symfony.com/doc/current/components/form/form_events.html#submitting-a-form-formevents-pre-submit-formevents-submit-and-formevents-post-submit И для более практичный aproach, посмотрите на это: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html И если у вас все еще есть проблемы, пожалуйста, будьте более конкретными в своем вопросе. –
точно, Форма имеет коллекцию полей, состоящую из объекта и значения. Событие Pre_submit добавит элемент в эту коллекцию. Как вы можете видеть в приведенном ниже примере, если вы вручную добавите элемент в массив: Событие PRE_SUBMIT правильно добавлено третьим элементом Событие SUBMIT не отображается на третий элемент, поэтому я не вижу его в форма. Я не знаю, был ли я чист. Спросите меня, у вас ли ультерирори сомнения. Спасибо за доступность. –
Наконец-то я решаю это !!!!! Чтобы установить fileld коллекцию в eventLister, данные должны быть установлены в PRE_SUBMIT, но не в сущности, непосредственно в связи с: $ builder-> addEventListener ( \t \t FormEvents :: PRE_SUBMIT, \t \t функция (FormEvent $ событие) { \t \t \t $ d = $ событийно> GetData(); \t \t \t $ d [ 'attributes_rel'] = массив ( \t \t \t \t \t массив ('dynamic_attribute' => 2), \t\t \t \t массив ('dynamic_attribute' => 3), \t \t \t \t \t массив ('dynamic_attribute' => 1), \t \t \t); \t \t \t $ event-> setData ($ d); }); –