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;
}
}