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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow