gpt4 book ai didi

forms - 使用选项卡以表格形式编辑 Symfony2 大实体

转载 作者:行者123 更新时间:2023-12-04 20:17:19 24 4
gpt4 key购买 nike

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

public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('firstName')
->add('lastName')...

实体有很多字段,我想将它们放在 jQuery UI 选项卡中。但是在 Twig 模板中我想使用单个命令
<form action="#" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" value="Save"/>
</form>

什么是最好的解决方案?

编辑**

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

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

最佳答案

我定义了我自己的名为“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;
}

}

?>

和 Twig
{# \src\Alden\xyzBundle\Resources\views\Form\fields.html.twig #}
{% block tabs_row %}
{% if header %}
<ul>
{% for tid, t in tabs %}
<li>
<a href="#{{ tid }}">{{ t }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if ending %}
</div>
{% endif %}
{% if starting %}
<div id="{{ id }}">
{% endif %}
{% endblock %}

以及在表单生成器中的用法:
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
))
;
}

关于forms - 使用选项卡以表格形式编辑 Symfony2 大实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10571612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com