Symfony Forms:Choice(下拉列表)显示Entity对象的层次结构

时间:2012-05-21 13:00:08

标签: php forms symfony symfony-forms

我目前正在使用Symfony 2.0.13进行项目,我正在处理用户注册表单。我的项目使用了Doctrine ORM,Twig和Form组件。

每个用户都必须选择一个区域。 Area对象基本上定义如下:

<?php

namespace Acme\AwesomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table
 * @ORM\Entity
 */
class Area
{

    /**
     * @var integer $id
     *
     * @ORM\Column(type="smallint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     *
     * @ORM\Column(type="string", length="64", nullable=false)
     */
    private $name;

    /**
     * @ORM\ManyToOne(targetEntity="Area", inversedBy="children")
     * @ORM\JoinColumn(name="parent")
     */
    private $parent;

    /**
     *
     * @ORM\OneToMany(targetEntity="Area", mappedBy="parent")
     */
    private $children;

    /**
     *
     * @ORM\Column(type="boolean", nullable=false)
     */
    private $selectable;

    // + all the default getters and setters generated using the Symfony console
    // + a __toString() method which returns the name

正如您所看到的,区域可以有子区域(子区域),并且它们也可以具有子区域(例如,一个国家将是一个区域,并且将具有多个省/州,并且它们都将具有城市)。 此外,区域可以标记为可选择。

我想向用户显示一个下拉框来选择其中一个区域,但是层次结构应该清晰可见(我考虑使用连字符缩进项目)并且应该禁用标记为不可选择的区域,但是列表中显示。

我想我应该创建一个新的Form类型,但我不清楚我应该如何生成ChoiceList(或选择数组)。 所以希望有人可以指出我正确的方向,或者为我提供一些有用的资料。

1 个答案:

答案 0 :(得分:1)

您可以使用使用choice选项构建的简单choices类型:

$choices = $this->getFlatChoices();

// in a form type
$builder->add('area', 'choice', array('choices' => $choices));

我建议您查看here,了解如何执行此操作。