0 レビュー
1 回答
php-PRE_SUBMITイベントでフォームコレクションに要素を追加するSymfony
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
レビュー
答え :
解決策:
これは、状況、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);
});
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。