在Type类Symfony中使用Javascript

时间:2019-05-10 14:45:59

标签: javascript php symfony twig symfony4

我想创建一个表单以导入一些数据。但是此表格需要一个称为import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:async'; void main() { runApp(new MaterialApp( home: new HomePage(), )); } class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { List data; @override void initState() { super.initState(); getJSONData(); //method } @override Widget build(BuildContext context) { return new Scaffold( appBar: AppBar(title: Text("my JSON app")), body: new ListView.builder( itemCount: data == null ? 0 : data.length, itemBuilder: (BuildContext context, int index) { return new Container( child: new Center( child: new Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ new Card( child: new Container( child: new Text(data[index]['name'] ?? ''), padding: EdgeInsets.all(20), ), ) ], ), ), ); }, ), ); } Future<String> getJSONData() async { var response = await http.get( Uri.encodeFull("https://jsonplaceholder.typicode.com/users"), headers: {"Accept": "application/json"}); setState(() { var convertDataToJson = json.decode(response.body); data = convertDataToJson; }); } } 的信息。在我的网站上,您可以创建一些Constructeur。但是对于我的页面,我希望用户能够选择一个结构存在者(如果存在)或不存在,请选中一个框,然后将出现一个表格,用户将能够创建一个新的Constructeur

问题是我不怎么用Symfony 4做到这一点。我使用Constructeur命令生成表单。

这是我当前的控制器(此处尚无创建构造函数的代码)

CatalogueController

make:form

这是我的 CatalogueType(您可以看到 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

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

create.html.twig


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,
        ]);
    }
}

这是我的问题。当我的用户选中一个框以隐藏我的{% 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 %} 上的选择并显示新输入时,我该如何允许用户在其中输入用户要输入构造器名称的方式(我知道以后如何使用控制器执行此操作,但是如何我处理这个观点。)

1 个答案:

答案 0 :(得分:0)

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

因此,默认情况下,选择AND嵌入的表单将添加到视图中的表单中。

然后,您只需要一点JS即可掩盖默认情况下隐藏的嵌入表单,并根据需要切换两个元素,具体取决于是否选中了该复选框并且不起作用!

btw,如果Contructeur和Enterprise是实体,则可以使用EntityType显示选择(Doctrine将在保存时处理关联)。