1

我通常像这样将用户可选择的属性映射到相应的类

class Person {
  /**
   * @ORM\ManyToMany(targetEntity="HobbyClass")
   */
   private $hobby
}

class HobbyClass{
   private $name; // e.g. "Outdoors"
} 

要创建或编辑实体,我只需在表单中使用实体类型表单字段。然后,当我需要用 twig 显示实体视图时,我只需这样做:

    {% for item in person.hobby %}
        <li>{{ item.name }}</li> {# e.g. "Outdoors" #}
    {% endfor %}

但是这次我使用了实现 ChoiceListInterface 的类 Selectables

class Entity {
   /**
    * @var array
    */
    private $properties
}

class Selectables implements ChoiceListInterface {
  ...
}

然后我使用选择类型表单字段创建和编辑这个实体当然在树枝中我得到了键,而不是像以前那样的属性名称

    {% for item in entity.properties %}
        <li>{{ item }}</li> {#e.g. "property_key", whereas its name is "Sports"#}
    {% endfor %}

问题是数据只是一个仅在表单中有意义的键数组。但我需要在实体视图中显示它是人类可读的。

使用 ChoiceListInterface 的原因是选择列表不会用 CRUD 更新,我可以在代码中维护它。使用起来会花费更少的精力,并且不需要连接和数据库表。

什么是最好的解决方案:

  • 一个。像以前一样使用表和关联
  • 湾。代码自定义树枝扩展,它将从 ChoiceListInterface 类中获取相应的值
  • C。使用选择列表并使键可翻译,以便它们显示为属性名称
  • d。还要别的吗

谢谢

4

0 回答 0