我有一个Category实体,这个实体允许我创建一个我的数据树:
我想创建一个DiscountGrid实体。 DiscountGrid由文本域名称和包含按类别折扣百分比的数组组成($ discount [idCategory] = $ percentage)。
事实上,我想要一个这样的表格:
输出为$ discount [1] = 25,$ discount [2] = 30,.....
我不知道如何使用Symfony框架处理这种行为。这是我的实体的声明
class Category{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=255, nullable=true)
*/
private $slug;
/**
* @var int
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer")
*/
private $lft;
/**
* @var int
* @Gedmo\TreeLevel
* @ORM\Column(name="lvl", type="integer")
*/
private $lvl;
/**
* @var int
* @Gedmo\TreeRight
* @ORM\Column(name="rgt", type="integer")
*/
private $rgt;
/**
* @Gedmo\TreeRoot
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(name="root", referencedColumnName="id", onDelete="CASCADE")
*/
private $root;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM\JoinColumn(name="parent", referencedColumnName="id", onDelete="CASCADE")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
*/
private $children;
class DiscountGrid{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=255)
*/
private $slug;
/**
* @var array
*
* @ORM\Column(name="grid", type="array")
*/
private $grid;
答案 0 :(得分:1)
首先,如果您将DiscountGrid::$grid
作为数组存储,那么您要做的事情将是一场噩梦。这不仅会使你的表单创建变得非常困难,而且如果有一天你必须添加一个类别会发生什么?您是否会拖动所有索引以匹配新的类别列表?这不是你的问题,我可能会因为提出这个建议而被投票,但我绝对建议你建立一个更清洁的模型,因为有一个干净的模型是必须正确使用FormTypes。
我建议的是以下型号:
DiscountGrid::$grid
(将其重命名为$discounts
)是名为Discount
的新实体的ManyToOne。
Discount
的属性$category
是Category
的OneToMany和浮点数属性$reduction
。
完成此操作后,请创建一个DiscountFormType
,其中包含一个reduction
字段PercentType
。
然后,使用单个字段DiscountGridFormType
创建另一个表单discounts
作为CollectionType
。此CollectionType
应将entry_type
选项设置为DiscountFormType
。
最后,当您在Controller中创建表单时,将DiscountGrid
实体绑定到Discounts
属性中的discounts
个实体。你应该看到一系列最后有百分比的文本框。这是折扣列表,您可以在其中更改减少的值。
之后,某些形式主题将帮助您显示文本框旁边的类别名称。但是我猜你在此之前已经有了一段路要走。