Sök…
Syntax
- $ form = $ this-> createForm (Hushållstyp :: klass, $ hushåll, $ formOptions);
parametrar
Parameter | Definition |
---|---|
HouseholdType :: klass | anpassad formklass för hushållsenheten |
$ hushåll | en instans av hushållsenheten (vanligtvis skapad av $household = new Household(); ) |
$ formOptions | ett antal användardefinierade alternativ som ska överföras till $formOptions = array('foo' => 'bar'); , t.ex. $formOptions = array('foo' => 'bar'); |
Anmärkningar
När du skapar en formulärklass läggs formulärfält till i den public function buildForm(FormBuilderInterface $builder, array $options) {...}
-funktionen. Parametern $options
innehåller en uppsättning standardalternativ som attr
och label
. För att aktivera dina anpassade alternativ i formklassen måste alternativen initieras i configureOptions(OptionsResolver $resolver)
Så för vårt verkliga exempel:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Household',
'disabledOptions' => [],
));
}
Ett verkligt exempel från en hushållscontroller
Bakgrund: Hushållsenheten inkluderar en uppsättning optioner, som var och en är en enhet som hanteras i en admin-backend. Varje alternativ har en booleskt enabled
flagga. Om ett tidigare aktiverat alternativ är inställt på inaktiverat måste det fortsätta i senare hushållsredigeringar, men kan inte redigeras bort. För att uppnå detta kommer fältdefinitionen i formklassen att visa fältet som ett inaktiverat valfält om alternativet har enabled = false
(men kvarstår eftersom skicka-knappen utlöser ett javascript som tar bort det disabled
attributet.) Fältdefinitionen förhindrar också inaktiverade alternativ från att visas.
Formklassen måste då veta för en viss hushållsenhet vilka av dess alternativ som har inaktiverats. En tjänst har definierats som returnerar en matris med namnen på optioner som har inaktiverats. Den arrayen är $disabledOptions
.
$formOptions = [
'disabledOptions' => $disabledOptions,
];
$form = $this->createForm(HouseholdType::class, $household, $formOptions);
Hur de anpassade alternativen används i formklassen
->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');
}
},
))
Bostadsenhet
/**
* 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;
}
}