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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow