繁体   English   中英

Symfony2 - 创建字段集

[英]Symfony2 - Creating fieldsets

我正在尝试创建一个基本的fieldset模板。 我有的是这个:

fieldset.html.twig

{% form_theme form _self %}
{% block form_row %}
    <fieldset>
        <legend></legend>
        {{ form_row(form) }}
    </fieldset>
{% endblock %}

FieldsetType.php

class FieldsetType extends AbstractType
{
    public function __construct($tituloFieldset="")
    {
        $this->titulo = $tituloFieldset;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'attr' => array(
                'title'=>$this->titulo
            ),
           'mapped'=>false
        ));
    }

    public function getParent()
    {
        return 'form';
    }

    public function getName()
    {
        return 'fieldset';
    }

    private $titulo;
}

目前的用法

$builder->add('nestedform', new FieldsetType('legend'));

我已经尝试了所有方法:将标题添加为标签(没有字段渲染的额外标签),模板化整个表单(在这种情况下我不能添加额外的字段集),等等。

我该怎么办?

我已经将这个功能解压缩成一个捆绑包,因为我需要在一些项目中使用https://github.com/adamquaile/AdamQuaileFieldsetBundle

但基于其他一些答案和想法,它相当于:

class FieldsetType extends AbstractType {

    public function setDefaultOptions ( OptionsResolverInterface $resolver )
    {
        $resolver->setDefaults([
            'legend'    => '',
            'virtual'   => true,
            'options'   => array(),
            'fields'    => array(),
        ]);
    }

    public function buildForm ( FormBuilderInterface $builder, array $options )
    {
        if ( !empty($options['fields']) ) {

            foreach ( $options['fields'] as $field ) {
                $builder->add($field['name'], $field['type'], $field['attr']);
            }
        }
    }

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

    public function getName()
    {
        return 'fieldset';
    }
}

你走在正确的轨道上。 你可以在这里找到一个简单的例子: https//gist.github.com/spcmky/8512371

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM