Suche…
Syntax
- $ form = $ this-> createForm (HouseholdType :: class, $ haushalt, $ formOptions);
Parameter
Parameter | Definition |
---|---|
HouseholdType :: class | benutzerdefinierte Formularklasse für die Entität "Haushalt" |
$ Haushalt | eine Instanz der Entität "Haushalt" (in der Regel erstellt durch $household = new Household(); ) |
$ formOptions | ein Array von benutzerdefinierten Optionen, die an die Formularklasse übergeben werden sollen, zB $formOptions = array('foo' => 'bar'); |
Bemerkungen
Wenn Sie eine Formularklasse erstellen, werden die Formularfelder in der public function buildForm(FormBuilderInterface $builder, array $options) {...}
hinzugefügt. Der $options
Parameter enthält eine Reihe von Standardoptionen wie attr
und label
. Damit Ihre benutzerdefinierten Optionen in der Formularklasse verfügbar sind, müssen die Optionen in configureOptions(OptionsResolver $resolver)
initialisiert werden.
Also für unser reales Beispiel:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Household',
'disabledOptions' => [],
));
}
Ein reales Beispiel eines Haushaltscontrollers
Hintergrund: Die Entität "Haushalt" enthält eine Reihe von Optionen, von denen jede eine in einem Admin-Backend verwaltete Einheit ist. Jede Option hat eine boolean enabled
Flagge. Wenn eine zuvor aktivierte Option auf "Deaktiviert" gesetzt ist, muss sie in späteren Haushaltsbearbeitungen beibehalten werden, kann jedoch nicht entfernt werden. Um dies zu erreichen, wird die Felddefinition in der Formularklasse das Feld als deaktiviertes Auswahlfeld anzeigen, wenn die Option enabled = false
(wird jedoch beibehalten, da die Schaltfläche "Senden" ein Javascript auslöst, das das disabled
Attribut entfernt.) Die Felddefinition verhindert auch deaktivierte Optionen von angezeigt werden.
Die Formularklasse muss dann für eine bestimmte Entität im Haushalt wissen, welche ihrer Optionen deaktiviert wurden. Ein Service wurde definiert, der ein Array mit den Namen der deaktivierten Optionseinheiten zurückgibt. Dieses Array ist $disabledOptions
.
$formOptions = [
'disabledOptions' => $disabledOptions,
];
$form = $this->createForm(HouseholdType::class, $household, $formOptions);
Wie die benutzerdefinierten Optionen in der Formularklasse verwendet werden
->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');
}
},
))
Wohneinheit
/**
* 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;
}
}