Symfony 2 Formtype查询构建器

时间:2015-04-03 08:43:23

标签: php symfony symfony-forms

我有一个问题,并且使用Symfony 2表单类型,我似乎无法掌握它。 我有一个应该放入类别的设备。这很好用。我得到一个包含所有类别ID的选择框。

DeviceType.php:

->add('category', 'entity', array(
                'placeholder' => 'Please choose a category',
                'required' => true,
                'class' => 'MSelectorBundle:Category',
                'property' => 'id'))

然而,类别名称等存储在一个不同的实体中,这允许我使用OneToMany关系将它们翻译成不同的语言,如下所示:

Category.php: 

    class Category
    {
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="active", type="boolean")
     */
    private $active;
    /**
     * @ORM\OneToMany(targetEntity="\M\SelectorBundle\Entity\CategoryTranslations", mappedBy="category", cascade={"persist", "remove"} ,orphanRemoval=true)
     */
    protected $categoryTranslations;

现在,我不想显示非描述性的ID,而是希望以特定语言显示类别名称,但是我无法使其正常工作。

CategoryTranslations.php:
/**
 * CategoryTranslations
 *
 * @ORM\Table(name="categoryTranslations")
 * @ORM\Entity
 */
class CategoryTranslations
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", length=10)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @var integer
     *
     * @ORM\Column(name="category_id", type="integer", length=10)
     */
    private $category_id;

    /**
     * @var string
     *
     * @ORM\Column(name="lang", type="string", length=10)
     */
    private $lang;


    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=300)
     */
    private $name;

我已经尝试过查询构建器和数组集合,但我无法解决这个问题。我是symfony的新手,所以希望有人可以指出我正确的方向。 谢谢。

2 个答案:

答案 0 :(得分:2)

entity字段不适合您想要的内容。我建议您使用collection字段并将其传递给ChoiceListChoiceList构造函数接受两个数组,一个用于值,另一个用于标签。

您可能遇到的唯一问题是在表单提交后,当您尝试将值映射回实体时。请务必将实体ID作为值传递。

答案 1 :(得分:0)

'property' => 'id'更改为'property' => 'name'您还需要在实体类中实现getter和setter