【问题标题】:Symfony Forms: Choice (dropdown) reveal hierarchy of Entity objectsSymfony Forms:Choice(下拉菜单)显示实体对象的层次结构
【发布时间】:2012-05-21 13:00:07
【问题描述】:

我目前正在为一个项目使用 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(或选择数组)。 所以希望有人可以为我指明正确的方向或为我提供一些有用的资源。

【问题讨论】:

    标签: php forms symfony symfony-forms


    【解决方案1】:

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

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

    我建议您查看here 以了解如何执行此操作的示例。

    【讨论】:

    • 我最终创建了一个类,它将以正确的顺序将区域放入数组中。我将 getTreeName() 添加到 Area 实体中,该实体返回 Area 的名称,其前面有多个破折号,等于区域的深度(通过检查父级是否有父级以及该父级是否有父级来确定。 .等等..简单的while循环就可以了)。
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2016-12-06
    • 2021-12-17
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多