Symfony Forms:选择(下拉列表)揭示实体对象的层次结构


Symfony Forms: Choice (dropdown) reveal hierarchy of Entity objects

我目前正在为一个项目使用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
如您所见,一个区域可以有子区域(子

区域(,它们也可以有子区域(例如,一个国家是一个区域,有几个省/州,它们都有城市(。此外,可以将区域标记为可选或不可选。

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

我想我应该

创建一个新的表单类型,但我不太清楚我应该如何生成选择列表(或选择数组(。所以希望有人能为我指出正确的方向,或者为我提供一些有用的资源。

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

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

我建议您查看此处以举例说明如何执行此操作。