1

私は現在プロジェクトにSymfony2.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

ご覧のとおり、エリアにはサブエリア(子供)があり、サブエリアもあります(たとえば、国はエリアであり、いくつかの州/州があり、すべてに都市があります)。また、エリアを選択可能または選択不可としてマークすることもできます。

領域の1つを選択するためのドロップダウンボックスをユーザーに表示したいのですが、階層が明確に表示され(ハイフンを使用してアイテムをインデントすることを考えていました)、選択不可としてマークされた領域を無効にする必要がありますが、リスト。

新しいフォームタイプを作成する必要があると思いますが、ChoiceList(またはchoices配列)を生成する方法が明確ではありません。ですから、誰かが私を正しい方向に向けてくれるか、私にとって有用な情報源を持っていることを願っています。

4

1 に答える 1

1

オプションchoiceを使用して構築された単純な型を使用できます。choices

$choices = $this->getFlatChoices();

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

これを行う方法の例については、こちらをご覧になることをお勧めします。

于 2012-05-21T13:18:26.173 に答える