php - 制作一个包含两个单独值的表单类型,您可以使用 symfony 4 添加多次
问题描述
我是 Symfony 的新手,我想用 symfony 4 做一些事情。为了简化它,假设我有一个购物篮,我可以在其中添加或删除文章并选择我选择的每篇文章的数量。
所以在教义方面,我有三个实体:
class Basket {
protected $id;
protected $name;
}
class Article{
protected $id;
protected $name;
}
class Buying {
//ManyToOne
protected $basket;
//ManyToOne
protected $article;
protected $count;
}
我通过手工制作 HTML 并使用一些讨厌的 JS 代码完成了这个表单,但现在我想使用 Symfony 4 的表单来制作这个表单。
我认为最好的方法是为该“购买”实体创建我自己的表单类型,它有两个字段,其中一个是包含每篇文章的 Select,另一个是 $count 值,然后有可能添加尽可能多的“购买”,但我想不出一种方法来做到这一点,并且文档似乎没有涵盖这种情况。
解决方案
为此,您需要几种表单类型,并且您可能需要稍微调整一下您的实体。这是它的要点:
首先,您需要为每个购买的单个项目及其数量提供一个。这EntityType
将为您select
提供所有文章,正是您正在寻找的。
// BuyingType.php
$builder->add('article', EntityType::class, ['class' => Article::class]);
$builder->add('count', NumberType::class, [
'constraints' => [
new Count(['min' => 1]),
],
]);
第二个将CollectionType
代表整个篮子。
// BasketType.php
$builder->add('basket', CollectionType::class, [
'entry_type' => BuyingType::class,
'allow_add' => true,
'allow_delete' => true,
]);
推荐阅读
- vba - Access 2010 组合框事件根本不会触发
- elisp - defalias 的嵌套宏不起作用,但 macroexpand 输出有效?- Emacs Elisp
- core-data - SwiftUI 预览画布和核心数据
- node.js - 如何最低限度地使用 Babel 在 Node 中使用“import {obj1, obj2} from 'my-location'” - 没有 NPM
- r - 具有两个条件和 id 范围的两列之间的计算
- symfony4 - Symfony 动态表单:在属性路径“civilite”中给出的“字符串”、“NULL”类型的预期参数
- c# - 从链接到文件下载 SVG 失败,因为 base64 无效?
- html - html/php 中的一个表单中的多个提交按钮
- javascript - 单击在 Retina 屏幕上的某个缩放级别上不起作用 - Mac OS X
- tomcat - 设置 Tomcat 的 RECYCLE_FACDES = true 的缺点?