kor*_*ral 5 forms tabs symfony-forms symfony
我正在使用Sf2的表单构建器构建表单.
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('firstName')
->add('lastName')...
Run Code Online (Sandbox Code Playgroud)
实体有很多字段,我想把它们放在jQuery UI标签中.但在twig模板中,我想使用单个命令
<form action="#" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" value="Save"/>
</form>
Run Code Online (Sandbox Code Playgroud)
什么是最佳解决方案?
编辑**
为了更加坦诚:我有4个字段:firstName,lastName,birthDate,deathDate.我希望前两个字段位于第一个选项卡上,最后两个字段位于第二个选项卡上.我想继续像前面提到的那样渲染表单.
我有一个解决方案来创建我自己的字段,而不是连接到底层对象,它将呈现所需的html标签(h3,div等).
我定义了自己的字段,名为“Tab”,并在新选项卡出现时添加它。
\n\n<?php\n//\\src\\Alden\\xyzBundle\\Form\\Type\\TabsType.php\n\nnamespace Alden\\BonBundle\\Form\\Type;\n\nuse Symfony\\Component\\Form\\AbstractType;\nuse Symfony\\Component\\Form\\FormBuilder;\nuse Symfony\\Component\\Form\\FormView;\nuse Symfony\\Component\\Form\\FormInterface;\nuse Symfony\\Component\\Form\\FormError;\nuse Symfony\\Component\\Form\\CallbackValidator;\nuse Symfony\\Component\\Form\\FormValidatorInterface;\nuse Symfony\\Component\\Form\\Form;\n\nclass TabsType extends AbstractType {\n\n public function buildForm(FormBuilder $builder, array $options)\n {\n $builder->setAttribute(\'starting\', $options[\'starting\']);\n $builder->setAttribute(\'ending\', $options[\'ending\']);\n $builder->setAttribute(\'header\', $options[\'header\']);\n }\n\n public function buildView(FormView $view, FormInterface $form)\n {\n $parent = $form->getParent();\n if (is_null($parent->getParent()))\n {\n $tabs = $this->findTabs($parent);\n }\n else\n {\n $tabs = array();\n }\n $view->set(\'starting\', $form->getAttribute(\'starting\'));\n $view->set(\'ending\', $form->getAttribute(\'ending\'));\n $view->set(\'header\', $form->getAttribute(\'header\'));\n $view->set(\'tabs\', $tabs);\n }\n\n public function getDefaultOptions(array $options)\n {\n return array(\n \'property_path\' => false,\n \'starting\' => true,\n \'ending\' => true,\n \'header\' => false,\n );\n }\n\n public function getName()\n {\n return \'tabs\';\n }\n\n public function getParent(array $options)\n {\n return \'field\';\n }\n\n private function findTabs(Form $form)\n {\n $prefix = $form->getName();\n $tabs = array();\n foreach ($form->getChildren() as $child)\n {\n foreach ($child->getTypes() as $type)\n /* @var $child \\Symfony\\Component\\Form\\Form */\n {\n if (get_class($type) == __NAMESPACE__ . \'\\TabsType\')\n {\n if ($child->getAttribute(\'starting\'))\n {\n $tabs[$prefix . \'_\' . $child->getName()] = $child->getAttribute(\'label\');\n }\n }\n }\n }\n return $tabs;\n }\n\n}\n\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n和树枝
\n\n{# \\src\\Alden\\xyzBundle\\Resources\\views\\Form\\fields.html.twig #}\n{% block tabs_row %}\n{% if header %}\n<ul>\n {% for tid, t in tabs %}\n <li>\n <a href="#{{ tid }}">{{ t }}</a>\n </li>\n {% endfor %}\n</ul>\n{% endif %}\n{% if ending %}\n</div>\n{% endif %}\n{% if starting %}\n<div id="{{ id }}">\n{% endif %}\n{% endblock %}\n
Run Code Online (Sandbox Code Playgroud)\n\n以及表单生成器中的用法:
\n\npublic function buildForm(FormBuilder $builder, array $options)\n{\n $builder\n ->add(\'tabs_head\', new TabsType(), array(\n \'ending\' => false,\n \'starting\' => false,\n \'header\' => true\n ))\n ->add(\'tab_1\', new TabsType(), array(\n \'ending\' => false,\n \'label\' => \'Podstawowe\'\n ))\n ->add(\'firstName\', null, array(\n \'label\' => \'Imi\xc4\x99\'\n ))\n ->add(\'lastName\', null, array(\n \'label\' => \'Nazwisko\'\n ))\n ->add(\'tab_contact\', new TabsType(), array(\n \'label\' => \'Kontakt\'\n ))\n ->add(\'address\', new AddressType(), array(\n \'label\' => \'Adres zameldowania\'\n ))\n ->add(\'tabs_end\', new TabsType(), array(\n \'starting\' => false\n ))\n ;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
4836 次 |
最近记录: |