수색…


통사론

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

매개 변수

매개 변수 정의
HouseholdType :: class 가정 개체의 사용자 지정 양식 클래스
가정 세대 개체의 인스턴스 (일반적으로 $household = new Household(); 의해 생성됨)
$ formOptions 양식 클래스에 전달할 사용자 정의 옵션 $formOptions = array('foo' => 'bar'); 예 : $formOptions = array('foo' => 'bar');

비고

양식 클래스를 작성할 때 양식 필드는 public function buildForm(FormBuilderInterface $builder, array $options) {...} 함수에 추가됩니다. $options 매개 변수에는 attrlabel 과 같은 기본 옵션 집합이 포함됩니다. 양식 클래스에서 사용자 정의 옵션을 사용하려면 configureOptions(OptionsResolver $resolver) 에서 옵션을 초기화해야합니다.

그래서 우리의 실제 예를 보자.

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

가정용 컨트롤러의 실례

배경 : 가정용 엔티티는 일련의 옵션을 포함하며 각 옵션은 관리자 백엔드에서 관리되는 엔티티입니다. 각 옵션에는 부울 enabled 플래그가 있습니다. 이전에 활성화 된 옵션을 사용 안 함으로 설정하면 나중에 가정용 편집에서 유지해야하지만 편집 할 수는 없습니다. 이를 수행하기 위해 양식 클래스의 필드 정의는 옵션이 enabled = false 경우 비활성화 된 선택 필드로 필드를 표시합니다 (제출 버튼이 disabled 속성을 제거하는 javascript를 트리거하므로 유지됩니다). 필드 정의는 비활성화 된 옵션 표시되지 않습니다.

그런 다음 양식 클래스는 해당 가정용 엔티티에 대해 옵션 중 어떤 것이 비활성화되었는지 알아야합니다. 비활성화 된 옵션 엔터티의 이름 배열을 반환하는 서비스가 정의되었습니다. 그 배열은 $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