Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 使用选项卡编辑表单中的Symfony2大实体_Forms_Symfony_Tabs_Symfony Forms - Fatal编程技术网

Forms 使用选项卡编辑表单中的Symfony2大实体

Forms 使用选项卡编辑表单中的Symfony2大实体,forms,symfony,tabs,symfony-forms,Forms,Symfony,Tabs,Symfony Forms,我正在使用Sf2的表单生成器构建表单 public function buildForm(FormBuilder $builder, array $options) { $builder->add('firstName') ->add('lastName')... 实体有很多字段,我想把它们放在jQueryUI选项卡中。但在twig模板中,我希望使用单个命令 <form action="#" method="post" {{ form_enct

我正在使用Sf2的表单生成器构建表单

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('firstName')
            ->add('lastName')...
实体有很多字段,我想把它们放在jQueryUI选项卡中。但在twig模板中,我希望使用单个命令

<form action="#" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="submit" value="Save"/>
</form>

{{form_widget(form)}
什么是最好的解决方案

编辑**

更具体地说:我有4个字段:名字、姓氏、出生日期、死亡日期。我希望前两个字段位于第一个选项卡上,最后两个字段位于第二个选项卡上。我希望保持前面提到的呈现表单的方式


我想到了一个解决方案,创建我自己的字段,而不是连接到参考底图对象,它将呈现所需的html标记(h3、div等)。

如果希望表单像表单向导一样运行,可以查看

这很好,例如,您可以定义第一步为填写软件详细信息,然后在第二步中填写版本详细信息。或者任何你想要的

功能

  • 导航(下一步、返回、重新开始)
  • 步骤说明
  • 跳过指定步骤
  • 每个步骤的不同验证组
  • 动态步进导航
这是一个现场演示

但在twig模板中,我希望使用单个命令

<form action="#" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="submit" value="Save"/>
</form>
你的意思是渲染这些字段吗

{{ form_rest(form) }}

呈现所有未渲染的表单

我定义了自己的名为“Tab”的字段,并在出现新选项卡时添加它

<?php
//\src\Alden\xyzBundle\Form\Type\TabsType.php

namespace Alden\BonBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\CallbackValidator;
use Symfony\Component\Form\FormValidatorInterface;
use Symfony\Component\Form\Form;

class TabsType extends AbstractType {

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->setAttribute('starting', $options['starting']);
        $builder->setAttribute('ending', $options['ending']);
        $builder->setAttribute('header', $options['header']);
    }

    public function buildView(FormView $view, FormInterface $form)
    {
        $parent = $form->getParent();
        if (is_null($parent->getParent()))
        {
            $tabs = $this->findTabs($parent);
        }
        else
        {
            $tabs = array();
        }
        $view->set('starting', $form->getAttribute('starting'));
        $view->set('ending', $form->getAttribute('ending'));
        $view->set('header', $form->getAttribute('header'));
        $view->set('tabs', $tabs);
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'property_path' => false,
            'starting' => true,
            'ending' => true,
            'header' => false,
        );
    }

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

    public function getParent(array $options)
    {
        return 'field';
    }

    private function findTabs(Form $form)
    {
        $prefix = $form->getName();
        $tabs = array();
        foreach ($form->getChildren() as $child)
        {
            foreach ($child->getTypes() as $type)
            /* @var $child \Symfony\Component\Form\Form */
            {
                if (get_class($type) == __NAMESPACE__ . '\TabsType')
                {
                    if ($child->getAttribute('starting'))
                    {
                        $tabs[$prefix . '_' . $child->getName()] = $child->getAttribute('label');
                    }
                }
            }
        }
        return $tabs;
    }

}

?>

我需要一次加载所有表单字段。
public function buildForm(FormBuilder $builder, array $options)
{
    $builder
            ->add('tabs_head', new TabsType(), array(
                'ending' => false,
                'starting' => false,
                'header' => true
            ))
            ->add('tab_1', new TabsType(), array(
                'ending' => false,
                'label' => 'Podstawowe'
            ))
            ->add('firstName', null, array(
                'label' => 'Imię'
            ))
            ->add('lastName', null, array(
                'label' => 'Nazwisko'
            ))
            ->add('tab_contact', new TabsType(), array(
                'label' => 'Kontakt'
            ))
            ->add('address', new AddressType(), array(
                'label' => 'Adres zameldowania'
            ))
            ->add('tabs_end', new TabsType(), array(
                'starting' => false
            ))
    ;
}