Szukaj…


Składnia

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

Parametry

Parametr Definicja
HouseholdType :: class niestandardowa klasa formularza dla podmiotu gospodarstwa domowego
$ gospodarstwo domowe wystąpienie jednostki Gospodarstwa domowego (zwykle tworzone przez $household = new Household(); )
$ formOptions tablica opcji zdefiniowanych przez użytkownika, które mają zostać przekazane do klasy formularza, np. $formOptions = array('foo' => 'bar');

Uwagi

Podczas tworzenia klasy formularza pola formularza są dodawane w public function buildForm(FormBuilderInterface $builder, array $options) {...} . Parametr $options zawiera zestaw domyślnych opcji, takich jak attr i label . Aby włączyć niestandardowe opcje dostępne w klasie formularza, opcje należy zainicjować w configureOptions(OptionsResolver $resolver)

W naszym przykładzie z prawdziwego świata:

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

Prawdziwy przykład z kontrolera domowego

Tło: Podmiot gospodarstwa domowego zawiera zestaw opcji, z których każda jest podmiotem zarządzanym w zapleczu administratora. Każda opcja ma flagę z enabled logiczną. Jeśli wcześniej włączona opcja jest ustawiona na wyłączoną, będzie trzeba ją utrwalić w późniejszych edycjach domowych, ale nie będzie można jej edytować. Aby to osiągnąć, definicja pola w klasie formularza wyświetli pole jako wyłączone pole wyboru, jeśli opcja ma enabled = false (ale jest utrzymywane, ponieważ przycisk Prześlij wyzwala JavaScript, który usuwa disabled atrybut). Definicja pola zapobiega również wyłączonym opcjom od wyświetlenia.

Klasa formularza musi wówczas wiedzieć dla danego podmiotu gospodarstwa domowego, która z jego opcji została wyłączona. Zdefiniowano usługę, która zwraca tablicę nazw encji opcji, które zostały wyłączone. Ta tablica jest $disabledOptions .

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

Jak używane są opcje niestandardowe w klasie formularza

        ->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');
                }
            },
        ))

Jednostka mieszkaniowa

/**
 * 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow