【问题标题】:Using Javascript inside Type Class Symfony在类型类 Symfony 中使用 Javascript
【发布时间】:2019-05-10 14:45:58
【问题描述】:

我想创建一个表单来导入一些数据。但此表格需要一个名为Constructeur 的信息。在我的网站上,您可以创建一些 Constructeur 。但是对于我的页面,我希望用户能够选择一个构造器,如果存在,或者如果不选中一个框,然后会出现一个表单,用户将能够创建一个新的Constructeur

问题是我不知道如何使用 Symfony 4 执行此操作。我使用 make:form 命令生成我的表单。

这是我当前的控制器(创建构造函数的代码还没有在这里)

目录控制器


class CatalogueController extends AbstractController
{
    /**
     * @Route("/admin/catalogues/create", name="admin.catalogues.new")
     * @param Request $request
     * @return RedirectResponse | Response
     */
    public function new(Request $request)
    {
        $catalogue = new Catalogue();
        $form = $this->createForm(CatalogueType::class, $catalogue);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()){
            $this->em->persist($catalogue);
            $this->em->flush();
            $this ->addFlash('success', 'Catalogue crée avec succès');
            return $this->redirectToRoute('admin.catalogues.index');
        }
        return $this->render('/admin/catalogues/create.html.twig', [
            'catalogue' => $catalogue,
            'form' => $form->createView()
        ]);
    }
//some codes
}

这是我的 CatalogueType(可以看constructeur_id

目录类型


class CatalogueType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('catalogue_date_debut', DateType::class, [
                'widget' => 'single_text',
                'html5' => false,
                'attr' => ['class' => 'datepicker'],
            ])
            ->add('catalogue_date_fin', DateType::class, [
                'placeholder' => 'Sélectionner un date de début',
                'widget' => 'single_text',
                'html5' => false,
                'attr' => ['class' => 'datepicker'],
            ])
            ->add('is_active', CheckboxType::class, [
                'label'    => 'Le catalogue est-il actif ?',
                'value' => 0,
                'required' => false,
            ])
            ->add('entreprise_id')
            ->add('contructeur_id')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Catalogue::class,
        ]);
    }
}

这是我的观点以及我如何实现我的表单

create.html.twig

{% extends 'admin/baseadmin_html.twig' %}

{% block title %}Créer un Catalogue{% endblock %}


{% block body %}
    <div class="row">
        <div class="col s12 m12 l12">
            <div class="card white">
                <div class="card-content black-text">
                    <span class="card-title">Créer un Catalogue</span>
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col s12 m12 l12">
            <div class="card-panel ">
                <div class="row">

                    {{ form_start(form) }}
                    {{ form_widget(form) }}


                    <button class="btn s12 m6 l3">{{ button|default('Enregister') }}</button>
                    {{ form_end(form) }}
                </div>
            </div>
        </div>
    </div>
{% endblock %}

所以这是我的问题。当我的用户选中一个框以隐藏我的 constructeur_id 上的选择并显示一个新的输入时,我怎么能允许我的用户在其中写入构造者名称(我知道稍后如何使用控制器执行此操作,但我该如何处理与视图。)

【问题讨论】:

    标签: javascript php symfony twig symfony4


    【解决方案1】:

    您可以在 Symfony 中将表单嵌入到另一个表单中:https://symfony.com/doc/current/form/embedded.html

    所以默认情况下,选择和嵌入的表单将被添加到视图中的表单中。

    然后你只需要一点 JS 来屏蔽默认隐藏的嵌入表单,并根据需要切换两个元素,这取决于复选框是否被选中,瞧!

    顺便说一句,如果 Contructeur 和 Enterprise 是实体,您可以使用 EntityType 来显示一个选择(Doctrine 将在保存时处理关联)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多