Код: Выделить всё
public function getBlockPrefix(): string
{
return 'bootstrap_toggle';
}
Код: Выделить всё
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$config = $form->getParent()->get($form->getName())->getConfig();
$options = $config->getOptions();
$defaultDataOptions = $this->_bootstrapToggleDataDefaults;
$form->getParent()->add($form->getName(), CheckboxType::class, array_replace_recursive($options, [
'attr' => $defaultDataOptions,
]))
;
});
}
Код: Выделить всё
{% block bootstrap_toggle_row %}
{% for child in form.children if not child.rendered %}
{{ form_label(child) }}
{{ form_widget(child) }}
{{ form_help(child) }}
{{ form_errors(child) }}
{% endfor %}
{% endblock %}
Проблема в основном связана с этой частью кода $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { . Однако мне нужно использовать такую конструкцию для создания поля, используя имя, предоставленное FormType object $builder->add('is_published', BootstrapToggleType::class)
если я изменю эту часть кода на что-то подобное
Код: Выделить всё
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addChild('testName', CheckboxType::class);
}
добавлен
Поскольку я повторно добавил еще одного дочернего элемента, мне необходимо указать правильный префикс блока.
Код: Выделить всё
$form->getParent()->add($form->getName(), CheckboxType::class, array_replace_recursive($options, [
'attr' => $defaultDataOptions,
'block_prefix' => 'bootstrap_toggle'
]));
Код: Выделить всё
{% for child in form.children if not child.rendered %}
Код: Выделить всё
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_help(form) }}
{{ form_errors(form) }}
Подробнее здесь: https://stackoverflow.com/questions/610 ... ering-form