Symfony/TWIG:无法为具有动态ID的表单(createNamedBuilder)设置自定义主题


Symfony/TWIG: Unable to set custom theme for form with dynamic ID (createNamedBuilder)

我想用Bootstrap的单选按钮组替换Symfony的默认单选按钮小部件。我试图通过为使用createNamedBuilder函数创建的Symfony表单中的单个字段设置自定义主题来实现这一点。我失败了,因为自定义字段主题需要字段的 ID,在我的情况下是动态的。我知道在 TWIG 中不可能在主题名称中使用变量,但也许我可以使用另一种方法来解决我的问题。

法典

我有一个控制器,它可以在循环中创建一种表单类型的多个实例。表单的名称是通过连接requestform_和表单的 ID 动态创建的:

public function listAction(Request $request)
{
    $entityManager = $this->getDoctrine()->getManager();
    $requestForms = $entityManager->getRepository('AppBundle:RequestForm')->findBy(array(), array('id' => 'ASC'));
    $forms = array();   
    foreach ($requestForms as $requestForm) {
        $formBuilder = $this->get('form.factory')->createNamedBuilder('requestform_'.$requestForm->getId(), RequestFormType::class, $requestForm);
        $form = $formBuilder->getForm()->handleRequest($request);
        $forms[] = $form->createView();
    }
    return $this->render('form/index.html.twig', array('forms' => $forms));
}

RequestFormTypebuildForm功能准备单选按钮小部件,如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('status', EntityType::class, array(
        'class' => 'AppBundle:Status',
        'choice_label' => 'name',
        'expanded' => true,
        'multiple' => false
    ));
}

控制器呈现以下模板:

{% block content %}
    {% for form in forms %}
        {{ form_start(form) }}
            {{ form_widget(form.status) }}
        {{ form_end(form) }}
    {% endfor %}
{% endblock %}

其主题是显示 Bootstrap 的按钮组选择器而不是单选按钮:

{% block _requestform_1_status_widget %}
    <div id={{ form.vars.id }} class="btn-group" data-toggle="buttons">
        {% for status in form.children %}
            <label for={{ status.vars.id }} class="btn btn-primary required custom-button-radio">
                <input type="radio" id={{ status.vars.id }} name={{ status.vars.full_name }} required="required" value={{ status.vars.value }}>
                {{ status.vars.label }}
            </label>
        {% endfor %}
    </div>
{% endblock _requestform_1_status_widget %}

您可能已经注意到,这仅适用于请求表单 ID 1,而不适用于其他 ID 值,因为 TWIG 不允许在块名称中使用变量,即 {% block _requestform_VARIABLE_status_widget %} .

任何帮助非常感谢!谢谢

我的直觉是,您可能只想有一个表单,其中包含一个包含 CollectionType 字段的 entry_type = RequestFormType::class,然后在树枝中,将表单应用于整个"外部"表单。您仍然应该能够以您想要的方式管理事情。

相关文章:
  • 没有找到相关文章