サーチ…


構文

  • $ form = $ this-> createForm(HouseholdType :: class、$世帯、$ formOptions);

パラメーター

パラメータ定義
HouseholdType :: class 家系のカスタムフォームクラス
$世帯世帯エンティティのインスタンス(通常は$household = new Household();によって作成され$household = new Household();
$ formOptions フォームクラスに渡されるユーザ定義オプションの配列。たとえば、 $formOptions = array('foo' => 'bar');

備考

フォームクラスを作成すると、フォームフィールドはpublic function buildForm(FormBuilderInterface $builder, array $options) {...}関数に追加されます。 $optionsパラメータには、 attrlabelなどのデフォルトオプションのセットが含まれています。フォームクラスでカスタムオプションを使用できるようにするには、 configureOptions(OptionsResolver $resolver)オプションを初期化する必要があります。

実際の例では、

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Household',
        'disabledOptions' => [],
    ));
}

家庭用コントローラの実例

背景:世帯エンティティには一連のオプションが含まれており、それぞれのオプションは管理バックエンドで管理されるエンティティです。各オプションにはブール値enabledフラグがあります。以前に有効になっていたオプションが無効に設定されている場合は、それ以降の家庭の編集で保持する必要がありますが、編集することはできません。これを実現するために、フォームクラスのフィールド定義では、オプションがenabled = falsedisabled属性を削除するjavascriptをトリガーするために保持されます)フィールドが無効な選択フィールドとして表示されます。表示されないようにします。

フォームクラスは、特定の世帯エンティティに対して、どのオプションが無効になっているかを知る必要があります。無効になっているオプションエンティティの名前の配列を返すサービスが定義されています。その配列は$disabledOptionsです。

    $formOptions = [
        'disabledOptions' => $disabledOptions,
        ];
    $form = $this->createForm(HouseholdType::class, $household, $formOptions);

フォームクラスでのカスタムオプションの使用方法

        ->add('housing', EntityType::class,
            array(
            'class' => 'AppBundle:Housing',
            'choice_label' => 'housing',
            'placeholder' => '',
            'attr' => (in_array('Housing', $options['disabledOptions']) ? ['disabled' => 'disabled'] : []),
            'label' => 'Housing: ',
            'query_builder' => function (EntityRepository $er) use ($options) {
                if (false === in_array('Housing', $options['disabledOptions'])) {
                    return $er->createQueryBuilder('h')
                        ->orderBy('h.housing', 'ASC')
                        ->where('h.enabled=1');
                } else {
                    return $er->createQueryBuilder('h')
                        ->orderBy('h.housing', 'ASC');
                }
            },
        ))

住宅団体

/**
 * Housing.
 *
 * @ORM\Table(name="housing")
 * @ORM\Entity
 */
class Housing
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var bool
     *
     * @ORM\Column(name="housing", type="string", nullable=false)
     * @Assert\NotBlank(message="Housing may not be blank")
     */
    protected $housing;

    /**
     * @var bool
     *
     * @ORM\Column(name="enabled", type="boolean", nullable=false)
     */
    protected $enabled;

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

    /**
     * Set housing.
     *
     * @param int $housing
     *
     * @return housing
     */
    public function setHousing($housing)
    {
        $this->housing = $housing;

        return $this;
    }

    /**
     * Get housing.
     *
     * @return int
     */
    public function getHousing()
    {
        return $this->housing;
    }

    /**
     * Set enabled.
     *
     * @param int $enabled
     *
     * @return enabled
     */
    public function setEnabled($enabled)
    {
        $this->enabled = $enabled;

        return $this;
    }

    /**
     * Get enabled.
     *
     * @return int
     */
    public function getEnabled()
    {
        return $this->enabled;
    }

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\OneToMany(targetEntity="Household", mappedBy="housing")
     */
    protected $households;

    public function addHousehold(Household $household)
    {
        $this->households[] = $household;
    }

    public function getHouseholds()
    {
        return $this->households;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow