Symfony2和表单主题/自定义(必需/帮助/错误)

Symfony2和表单主题/自定义(必需/帮助/错误),symfony,twig,theming,formbuilder,Symfony,Twig,Theming,Formbuilder,也许我忽略了一些事情,希望这很容易做到 我有一个表格,我最终想要的是以下结果: 字段,其中: 是强制性的/必需的 当前有一个错误 有帮助 应在标签后面附加一个标签和一个额外的div,并填入帮助和/或错误(如果适用) 我要做的是,必填字段通过以下方式获得a-标记: {% use 'form_div_layout.html.twig' with field_label as base_field_label %} {% block field_label %} {{ block('ba

也许我忽略了一些事情,希望这很容易做到

我有一个表格,我最终想要的是以下结果:

字段,其中:

  • 是强制性的/必需的
  • 当前有一个错误
  • 有帮助
应在标签后面附加一个
标签和一个额外的div,并填入帮助和/或错误(如果适用)

我要做的是,必填字段通过以下方式获得
a
-标记:

{% use 'form_div_layout.html.twig' with field_label as base_field_label %}

{% block field_label %}
    {{ block('base_field_label') }}

    {% if required %}
        <a href=""><span>&nbsp;</span></a>
    {% endif %}
{% endblock %}
  • 如何判断当前字段有错误(将类添加到行中)以及如果有,如何显示它<代码>{{form_errors(form)}}
  • 没有输出任何内容,无论我将其放在“field_row”中的什么位置


    没有帮助文本,您必须为字段创建表单扩展,并将其添加到默认选项中

    SF 2.1 Beta 1中的示例:

    namespace Webility\Bundle\WebilityBundle\Form\Extension;
    
    use Symfony\Component\Form\FormInterface;
    use Symfony\Component\Form\FormViewInterface;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\AbstractTypeExtension;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    
    class HelpFormTypeExtension extends AbstractTypeExtension
    {
    
        public function buildView(FormViewInterface $view, FormInterface $form, array $options){
            $view->setVar('help', $options['help']);
        }
    
        public function getExtendedType(){
            return 'field';
        }
    
        public function setDefaultOptions(OptionsResolverInterface $resolver) {
            $resolver->setDefaults(array(
                'help' => null
            ));
        }
    }
    
    并将其注册为服务:

    <service id="webility.form.extension.help" class="Webility\Bundle\WebilityBundle\Form\Extension\HelpFormTypeExtension">
            <tag name="form.type_extension" alias="field" />
    </service> 
    
    
    
    关于错误问题: 你有什么要打印的错误吗?如果验证失败,请在控制器中检查:

    echo '<pre>'; print_r( $form->getErrorsAsString() ); echo '</pre>'; exit;
    
    echo';打印($form->getErrorsAsString());回声';出口
    
    如我在问题中所述解决它非常有帮助

    我用另一种方式解决了这个问题,我也想在这里发布。根据手册,我构建了以下内容:

    注意此解决方案无法与
    formbuilder一起工作
    ,需要在twig中进行一些调整

    要获取帮助“”-标记(实际上它们现在是div)…
    {%block field\u label%}
    {{block('base_field_label')}
    {%如果定义了attr.class并且“\u hint”==attr.class%}
    帮助图标
    {%如果定义了帮助%}
    {{help | raw}
    {%else%}
    有人忘了插入帮助信息
    {%endif%}
    {%endif%}
    {%endblock%}
    
    在发生错误时获取正确的类
    {%block field\u row%}
    {%spaceless%}
    {{form_标签(form)}
    {{form_小部件(form,{'attr':{'class':'grid_4'}}}}
    {%endspaceless%}
    {%endblock字段\行%}
    
    以及来自模板的调用
    
    {form_标签(form.field,null,{'attr':{'class':'u hint'},'help':'帮助文本或包含它的变量'}}}}
    {{form_小部件(form.field,{'attr':{'class':'grid_4'}}}}
    
    非常感谢您的帮助和检查错误的提示。另外,Twig中的
    {{dump([var])}
    帮助很大。用这种方式编写表单扩展非常简单。我们必须为这个基本表单功能编写扩展,这是荒谬的。Symfony2通常会使简单的事情变得比它们应该的要困难得多。我不知道这个解决方案如何帮助打印分配给每个表单字段类型的工具提示,因为它们不是从我们的新表单类型继承的?在ZendFramework中,可以为渲染过程设置描述、传递附加选项和传递修改的装饰器
    <service id="webility.form.extension.help" class="Webility\Bundle\WebilityBundle\Form\Extension\HelpFormTypeExtension">
            <tag name="form.type_extension" alias="field" />
    </service> 
    
    echo '<pre>'; print_r( $form->getErrorsAsString() ); echo '</pre>'; exit;