Buscar..


Sintaxis

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

Parámetros

Parámetro Definición
Tipo de Hogar :: clase clase de formulario personalizado para la entidad del hogar
$ hogar una instancia de la entidad del hogar (generalmente creada por $household = new Household(); )
$ formOptions un conjunto de opciones definidas por el usuario para pasar a la clase de formulario, por ejemplo, $formOptions = array('foo' => 'bar');

Observaciones

Al crear una clase de formulario, los campos de formulario se agregan en la public function buildForm(FormBuilderInterface $builder, array $options) {...} . El parámetro $options incluye un conjunto de opciones predeterminadas, como attr y label . Para permitir que sus opciones personalizadas estén disponibles en la clase de formulario, las opciones deben inicializarse en configureOptions(OptionsResolver $resolver)

Así que para nuestro ejemplo del mundo real:

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

Un ejemplo del mundo real de un controlador de la casa

Antecedentes: la entidad del hogar incluye un conjunto de opciones, cada una de las cuales es una entidad que se administra en un backend de administración. Cada opción tiene una bandera enabled booleana. Si una opción previamente habilitada está configurada como deshabilitada, deberá persistir en las ediciones posteriores de Household, pero no podrá ser eliminada. Para lograr esto, la definición de campo en la clase de formulario mostrará el campo como un campo de opción deshabilitado si la opción ha enabled = false (pero se mantiene porque el botón de envío activa un javascript que elimina el atributo disabled ). La definición de campo también evita las opciones deshabilitadas de ser mostrado.

La clase de formulario debe saber, para una entidad del hogar determinada, cuál de sus opciones se ha deshabilitado. Se ha definido un servicio que devuelve una matriz de los nombres de las entidades de opción que se han deshabilitado. Esa matriz es $disabledOptions .

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

Cómo se usan las opciones personalizadas en la clase de formulario

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

Entidad de vivienda

/**
 * 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow