我想创建一个表单以导入一些数据。但是此表格需要一个称为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 %}
上的选择并显示新输入时,我该如何允许用户在其中输入用户要输入构造器名称的方式(我知道以后如何使用控制器执行此操作,但是如何我处理这个观点。)
答案 0 :(得分:0)
您可以将表单嵌入到Symfony中的另一个表单中:https://symfony.com/doc/current/form/embedded.html
因此,默认情况下,选择AND嵌入的表单将添加到视图中的表单中。
然后,您只需要一点JS即可掩盖默认情况下隐藏的嵌入表单,并根据需要切换两个元素,具体取决于是否选中了该复选框并且不起作用!
btw,如果Contructeur和Enterprise是实体,则可以使用EntityType显示选择(Doctrine将在保存时处理关联)。