Ricerca…


Sintassi

  • $ form = $ this-> createForm (HouseholdType :: class, $ household, $ formOptions);

Parametri

Parametro Definizione
HouseholdType :: class classe di modulo personalizzato per l'entità Household
$ domestici un'istanza dell'entità domestica (in genere creata da $household = new Household(); )
$ formOptions una serie di opzioni definite dall'utente da passare alla classe del modulo, ad esempio $formOptions = array('foo' => 'bar');

Osservazioni

Quando si crea una classe modulo, i campi modulo vengono aggiunti nella public function buildForm(FormBuilderInterface $builder, array $options) {...} . Il parametro $options include una serie di opzioni predefinite come attr e label . Per abilitare le opzioni personalizzate a essere disponibili nella classe del modulo, le opzioni devono essere inizializzate in configureOptions(OptionsResolver $resolver)

Quindi per il nostro esempio del mondo reale:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Household',
        'disabledOptions' => [],
    ));
}

Un esempio del mondo reale da un controller domestico

Background: l'entità Household include un set di opzioni, ognuna delle quali è un'entità gestita in un back-end di amministrazione. Ogni opzione ha un flag booleano enabled . Se un'opzione precedentemente abilitata è impostata su disabilitata, sarà necessario mantenerla in un secondo momento, ma non può essere modificata. Per ottenere ciò, la definizione del campo nella classe form visualizzerà il campo come campo di scelta disabilitato se l'opzione ha enabled = false (ma è persistente perché il pulsante di invio attiva un javascript che rimuove l'attributo disabled ). La definizione del campo impedisce anche le opzioni disabilitate da essere visualizzato.

La classe del modulo deve quindi conoscere, per una determinata entità Household, quali delle sue opzioni sono state disabilitate. È stato definito un servizio che restituisce una matrice dei nomi delle entità opzioni che sono state disabilitate. Quella matrice è $disabledOptions .

    $formOptions = [
        'disabledOptions' => $disabledOptions,
        ];
    $form = $this->createForm(HouseholdType::class, $household, $formOptions);

Come vengono utilizzate le opzioni personalizzate nella classe del modulo

        ->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à abitativa

/**
 * 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow