Szukaj…
Składnia
- $ form = $ this-> createForm (HouseholdType :: class, $ household, $ formOptions);
Parametry
Parametr | Definicja |
---|---|
HouseholdType :: class | niestandardowa klasa formularza dla podmiotu gospodarstwa domowego |
$ gospodarstwo domowe | wystąpienie jednostki Gospodarstwa domowego (zwykle tworzone przez $household = new Household(); ) |
$ formOptions | tablica opcji zdefiniowanych przez użytkownika, które mają zostać przekazane do klasy formularza, np. $formOptions = array('foo' => 'bar'); |
Uwagi
Podczas tworzenia klasy formularza pola formularza są dodawane w public function buildForm(FormBuilderInterface $builder, array $options) {...}
. Parametr $options
zawiera zestaw domyślnych opcji, takich jak attr
i label
. Aby włączyć niestandardowe opcje dostępne w klasie formularza, opcje należy zainicjować w configureOptions(OptionsResolver $resolver)
W naszym przykładzie z prawdziwego świata:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Household',
'disabledOptions' => [],
));
}
Prawdziwy przykład z kontrolera domowego
Tło: Podmiot gospodarstwa domowego zawiera zestaw opcji, z których każda jest podmiotem zarządzanym w zapleczu administratora. Każda opcja ma flagę z enabled
logiczną. Jeśli wcześniej włączona opcja jest ustawiona na wyłączoną, będzie trzeba ją utrwalić w późniejszych edycjach domowych, ale nie będzie można jej edytować. Aby to osiągnąć, definicja pola w klasie formularza wyświetli pole jako wyłączone pole wyboru, jeśli opcja ma enabled = false
(ale jest utrzymywane, ponieważ przycisk Prześlij wyzwala JavaScript, który usuwa disabled
atrybut). Definicja pola zapobiega również wyłączonym opcjom od wyświetlenia.
Klasa formularza musi wówczas wiedzieć dla danego podmiotu gospodarstwa domowego, która z jego opcji została wyłączona. Zdefiniowano usługę, która zwraca tablicę nazw encji opcji, które zostały wyłączone. Ta tablica jest $disabledOptions
.
$formOptions = [
'disabledOptions' => $disabledOptions,
];
$form = $this->createForm(HouseholdType::class, $household, $formOptions);
Jak używane są opcje niestandardowe w klasie formularza
->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');
}
},
))
Jednostka mieszkaniowa
/**
* 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;
}
}