【问题标题】:Specific form with two enities with Symfony带有 Symfony 的两个实体的特定形式
【发布时间】:2016-02-29 16:00:36
【问题描述】:

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

我想创建一个 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;

【问题讨论】:

    标签: forms symfony entity


    【解决方案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。您应该会看到一系列末尾带有百分比的文本框。这是您可以更改折扣值的折扣列表。

    之后,一些表单主题将帮助您在文本框旁边显示类别名称。但我想你在达到这一点之前已经有一段路要走。

    【讨论】:

    • 您的回答绝对不值得投反对票!我已经考虑过以更好的方式重建模型,但不如您的建议。今晚我会应用你的想法,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多