具有两个与Symfony一致的特定形式

时间:2016-02-29 16:00:37

标签: forms symfony entity

我有一个Category实体,这个实体允许我创建一个我的数据树:

enter image description here

我想创建一个DiscountGrid实体。 DiscountGrid由文本域名称和包含按类别折扣百分比的数组组成($ discount [idCategory] ​​= $ percentage)。

事实上,我想要一个这样的表格:

enter image description here

输出为$ 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;

1 个答案:

答案 0 :(得分:1)

首先,如果您将DiscountGrid::$grid作为数组存储,那么您要做的事情将是一场噩梦。这不仅会使你的表单创建变得非常困难,而且如果有一天你必须添加一个类别会发生什么?您是否会拖动所有索引以匹配新的类别列表?这不是你的问题,我可能会因为提出这个建议而被投票,但我绝对建议你建立一个更清洁的模型,因为有一个干净的模型是必须正确使用FormTypes。

我建议的是以下型号: DiscountGrid::$grid(将其重命名为$discounts)是名为Discount的新实体的ManyToOne。 Discount的属性$categoryCategory的OneToMany和浮点数属性$reduction

完成此操作后,请创建一个DiscountFormType,其中包含一个reduction字段PercentType

然后,使用单个字段DiscountGridFormType创建另一个表单discounts作为CollectionType。此CollectionType应将entry_type选项设置为DiscountFormType

最后,当您在Controller中创建表单时,将DiscountGrid实体绑定到Discounts属性中的discounts个实体。你应该看到一系列最后有百分比的文本框。这是折扣列表,您可以在其中更改减少的值。

之后,某些形式主题将帮助您显示文本框旁边的类别名称。但是我猜你在此之前已经有了一段路要走。