У меня проблемы с событиями формы в классе администратора.
У меня есть динамически добавленные варианты выбора в пользовательском типе объекта. Варианты добавляются в базу данных с помощью javascript через контроллер. Чтобы иметь возможность проверять эти динамические варианты (добавлено после рендеринга формы), я добавил событие формы PRE_SUBMIT в поле в классе администратора. Поэтому перед отправкой формы я загружаю новый список выбора из базы данных, удаляю и добавляю поле обратно в форму, чтобы обновить его. параметры, как показано здесь https://gist.github.com/webdevilopers/f ... 7bb879d138
В шаблоне ветки типа формы я использую переменную sonata_admin.admin для получения необходимые данные.
Проблема в том, что когда в форме возникает ошибка (в любом другом поле в любом месте формы), переменная sonata_admin.admin из шаблона ветки имеет значение null.
спасибо за помощь
admin::configureFormFields()
$class = 'LibrinfoVarietiesBundle:SelectChoice';
$repo = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager')->getRepository($class);
$admin = $this;
$formBuilder = $formMapper->getFormBuilder();
$formBuilder->addEventListener(FormEvents::SUBMIT, function ($event) use ($formBuilder, $admin, $repo, $class) {
$form = $event->getForm();
$subject = $admin->getSubject($event->getData());
$label = 'librinfo_varieties_admin_variety_regulatory_status_librinfo_core_customchoice';
$choices = $repo->findBy(array(
'label' => $label
));
$choiceViews = array();
foreach ($choices as $choice)
{
$choiceViews[$choice->getvalue()] = $choice;
}
if ($form->has('regulatory_status'))
{
$form->remove('regulatory_status');
}
$customChoice = $formBuilder->getFormFactory()->createNamed('regulatory_status', 'librinfo_customchoice', null, array(
'choices' => $choices,
'class' => $class,
'auto_initialize' => false,
));
$form->add($customChoice);
});
тип формы ConfigurationOptions()
$label = 'librinfo_varieties_admin_variety_regulatory_status_librinfo_core_customchoice';
$choices = $this->repo->findBy(array(
'label' => $label
));
$choiceViews = array();
foreach ($choices as $choice)
{
$choiceViews[$choice->getvalue()] = $choice;
}
$resolver->setDefaults(array(
'choice_label' => 'value',
'class' => 'LibrinfoVarietiesBundle:SelectChoice',
'placeholder' => '',
'choices' => $choiceViews,
));
блок веток
{% block librinfo_customchoice_widget %}
{% set subject = sonata_admin.admin.subject %}
{% spaceless %}
{{ block('choice_widget') }}
{% if subject.fieldset is defined %}
{% else %}
{% endif %}
{% endspaceless %}
{% endblock %}
Подробнее здесь: https://stackoverflow.com/questions/389 ... iable-null
Событие формы администратора Sonata PRE_SUBMIT делает переменную ветки администратора нулевой ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение