Поиск…


Синтаксис

  • $ form = $ this-> createForm (Тип_объекта: класс, $ домохозяйство, $ formOptions);

параметры

параметр Определение
HouseholdType :: класс класс пользовательской формы для субъекта быта
$ домохозяйство экземпляр субъекта домохозяйства (обычно созданный по $household = new Household(); )
$ formOptions массив определенных пользователем опций, которые должны быть переданы классу формы, например $formOptions = array('foo' => 'bar');

замечания

Когда вы создаете класс формы, поля формы добавляются в public function buildForm(FormBuilderInterface $builder, array $options) {...} . Параметр $options включает набор параметров по умолчанию, таких как attr и label . Чтобы включить ваши настраиваемые параметры в классе формы, параметры необходимо инициализировать в configureOptions(OptionsResolver $resolver)

Итак, для нашего реального примера:

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

Реальный пример от контроллера домохозяйства

Предпосылки: объект «Бытие» включает в себя набор опций, каждый из которых является объектом, который управляется в бэкэнде администратора. Каждая опция имеет флаг boolean enabled . Если ранее включенная опция отключена, ее необходимо будет сохранить в последующих изменениях Домашнего Редактирования, но ее нельзя отредактировать. Для этого определение поля в классе формы отобразит поле как поле выбора отключенного, если опция enabled = false (но сохраняется, поскольку кнопка отправки запускает javascript, который удаляет disabled атрибут.) Определение поля также предотвращает отключенные параметры от отображения.

Затем класс формы должен знать, для данного субъекта домохозяйства, какой из его вариантов был отключен. Определена служба, которая возвращает массив имен объектов-параметров, которые были отключены. Этот массив равен $disabledOptions .

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

Как настраиваемые параметры используются в классе формы

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

Объект размещения

/**
 * 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow