首页 > 解决方案 > 如何将自定义选项传递给自定义 Symfony FormType 的树枝模板?

问题描述

如何将自定义选项直接Symfony 3.4传递给自定义FormType的 Twig 模板?


语境:

我创建了一个自定义FormType,它也使用自定义 Twig 模板来呈现其表单小部件。内置选项(例如 translation_domain、等lable_attr)可在模板中直接访问。我怎样才能为我的自定义选项实现相同的目标?

// MyCustomType.php
class MyCustomType extends AbstractType {
    public function getBlockPrefix() {
        return 'my_custom_field';
    }

    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults([
            'custom_option' => 'customOptionValue',
            'translation_domain' => 'customTranslationDomain',
        ]);
        
        $resolver->setAllowedTypes('custom_option', ['string']);
    }
}

// form_widgets.html.twig
{% block my_custom_field_widget %}
     {{ dump() }}
     {{ translation_domain }}
     {#{ custom_option }#}
{% endblock %}

当然这个表单小部件不是很有用,它只是转储可用的变量并且其内容translation_domain是可以直接访问的。添加{{ custom_option }}将导致错误,因为此选项/变量不可用。既不直接也不通过form.vars.custom_option.

只有将选项设置为form var时,才能在模板中访问:

// MyCustomType.php
class MyCustomType extends AbstractType {
    ...

    public function buildView(FormView $view, FormInterface $form, array $options) { 
        $view->vars['custom_option'] = $options['custom_option'];
    }
}

// form_widgets.html.twig
{% block my_custom_field_widget %}
     // fails
     {{ custom_option }}

     // works
     {{ form.vars.custom_option }}
{% endblock %}

因此,所有内置选项都可用,form_vars但也可以直接访问(例如,form.vars.translation_domain' AND as translation_domain`)。

我如何为我的自定义选项实现相同的目标?

当然,通过选项访问form.vars...是没有问题的。但是,我想知道这是否是正确的解决方案,因为可以直接访问内置类型。这些只是快捷方式(它们是如何添加的?)form.vars...还是其他配置?

标签: phpsymfonysymfony-forms

解决方案


推荐阅读