Recherche…


Syntaxe

  • $ form = $ this-> createForm (HouseholdType :: class, $ household, $ formOptions);

Paramètres

Paramètre Définition
HouseholdType :: class classe de formulaire personnalisée pour l'entité Household
$ ménage une instance de l'entité Household (généralement créée par $household = new Household(); )
$ formOptions un tableau d'options définies par l'utilisateur à transmettre à la classe de formulaire, par exemple, $formOptions = array('foo' => 'bar');

Remarques

Lorsque vous créez une classe de formulaire, les champs de formulaire sont ajoutés dans la public function buildForm(FormBuilderInterface $builder, array $options) {...} . Le paramètre $options inclut un ensemble d'options par défaut telles que attr et label . Pour que vos options personnalisées soient disponibles dans la classe de formulaire, les options doivent être initialisées dans configureOptions(OptionsResolver $resolver)

Donc, pour notre exemple concret:

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

Un exemple concret d'un contrôleur de ménage

Contexte: L'entité Household comprend un ensemble d'options, chacune d'entre elles étant une entité gérée dans un backend admin. Chaque option a un booléen enabled drapeau. Si une option précédemment activée est définie sur désactivée, elle devra être conservée dans les modifications ultérieures du foyer, mais ne pourra pas être modifiée. Pour ce faire, la définition de champ dans la classe de formulaire affichera le champ en tant que champ de sélection désactivé si l'option a été enabled = false (mais est persistée car le bouton de soumission déclenche un script JavaScript qui supprime l'attribut disabled ). d'être affiché

La classe de formulaire doit alors connaître, pour une entité Household donnée, laquelle de ses options a été désactivée. Un service a été défini qui renvoie un tableau des noms des entités optionnelles désactivées. Ce tableau est $disabledOptions .

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

Comment les options personnalisées sont utilisées dans la classe de formulaire

        ->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');
                }
            },
        ))

Entité de logement

/**
 * 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow