簡體   English   中英

有沒有辦法根據 Symfony 上的條件添加表單域?

[英]Is there a way to add a form field depending on a condition on Symfony?

朋友們。 這是我在這里提出的第一個問題; 所以,任何反饋都將受到歡迎。

我是 Symfony 的新手; 我正在使用的版本是 3.4 我已經為我的表單實現了三個 Type 類,結構是這樣的:有一個注冊表,它有一個 header 加上零,一個或多個問題。 每個問題都是一個“RegistryElement”,由零個、一個或多個答案加上一個“elementScore”和一個可選的“elementComment”組成。

Type 類的 buildForm 方法如下所示:

在 RegistryType.php 上:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('registryHeaderId', RegistryHeaderType::class, array(
            'label' => false,
        ))
        ->add('registryElements', CollectionType::class, array(
            'label'=>false,
            'entry_type' => RegistryElementType::class,
            'entry_options' => [
                'label' => false,
                'tokens'=>$options['tokens'],
            ],
            'allow_add' => true,
            'by_reference' => false,
        ))
        ->add('save', SubmitType::class, array("attr"=>array(
            "class"=>"form-submit btn-success",
            "style"=>"margin:10px;"
        )))
        ;

}

在 RegistryElementType.php 上:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('registryElementAnswers', CollectionType::class, array(
            'label'=>false,
            'entry_type' => RegistryElementAnswerType::class,
            'entry_options' => [
                'label' => false,
            ],
            'allow_add' => true,
            'by_reference' => false,
        ))
        ->add('elementScore', CheckboxType::class, array(
            "label"=>'type.registry_element_type.score',
            'required' => false,
            "translation_domain" => "FirstPieceBundle",
        ))
        ->add('elementComment', TextType::class, array(
            "label"=>'type.registry_element_type.element_comment',
            "required"=>false,
            "attr"=>array(
                "class"=>"form-name form-control",
            ),
            "translation_domain" => "FirstPieceBundle",
        ))
        ;

}

並且,在 RegistryElementAnswerType.php 上:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('answer', TextType::class, array(
            "label"=>false,
            "required"=>false,
            "attr"=>array(
                "class"=>"form-name form-control",
            ),
            "translation_domain" => "FirstPieceBundle",
        ))
        ;

}

現在,我想知道是否有一種方法可以根據條件“添加不同類型的字段”。 像這樣的東西:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    if(condition){
        $builder
            ->add('answer', TextType::class, array(
                "label"=>false,
                "required"=>false,
                "attr"=>array(
                    "class"=>"form-name form-control",
                ),
                "translation_domain" => "FirstPieceBundle",
            ))
            ;
    }
    else{
        $builder
            ->add('answer', ChoiceType::class, array(
                "label"=>false,
                "required"=>false,
                "attr"=>array(
                    "class"=>"form-name form-control",
                ),
                "translation_domain" => "FirstPieceBundle",
            ))
            ;
    }

}

我試圖通過 $options 數組傳遞一些值,但我真的被困在這里。 我非常感謝您的知識和指導。

問候。

您需要在那里使用的具體條件是什么?

如果要在$options數組中傳遞數據,則需要在configureOptions方法中添加選項鍵作為必需選項。

假設您要在$options中傳遞condition ,您的RegistryElementAnswerType class 應包含:

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setRequired('condition');
    }

現在,每當您引用RegistryElementAnswerType時,您都需要傳遞此選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM