Symfony2自定义表单渲染器助手功能

鱼骨

我想定义一个新的树枝功能“form_field”这使得form_labelform_widgetform_errors我不想重写,form_row因为我已经出于不同的目的这样做了:form_row还包装<div/>了布局所需的容器。具体来说,我添加了引导类。

我为什么需要这个?通常我会使用,form_row但是我有很多表单行,我想在同一行中放置两个或多个字段(例如“名字”和“姓氏”)。在这种情况下,我确定我的包裹<div/>手工,但我不想写三个函数调用(form_labelform_widgetform_errors)每次。

我试图指定一个自定义函数,但是在那里调用细枝函数时出现异常。对于此解决方案,我需要知道如何从自定义函数调用Twig函数。

我的第二次尝试是使Symfony的解决方案适合其自己的表单助手。我在供应商/symfony/symfony/src/Symfony/Bridge/Twig/Extension/FormExtension.php中找到了这一行:

new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),

看起来像一个实际上只是渲染一个块的函数。当我在AppBundle中修改该行时,抛出了一个异常,其中Symfony声称未定义名为“ form_field”的块。但是,我在自定义表单模板中定义了此块:

{% use 'bootstrap_3_horizontal_layout.html.twig' %}

{%- block form_field -%}
    {{- form_label(form) -}}
    {{- form_widget(form) -}}
    {{- form_errors(form) -}}
{%- endblock form_field -%}
鱼骨

声明树枝模板Form / form_field.html.twig:

{%- block form_field -%}
    {{- form_label(form, label) -}}
    {{- form_widget(form) -}}
    {{- form_errors(form) -}}
{%- endblock form_field -%}

然后,我renderBlock在Twig自定义函数中使用了该方法。这是描述了我树枝扩展文件在这里

namespace AppBundle\Twig;

class AppExtension extends \Twig_Extension
{
    protected $environment;
    private $template;

    public function __construct(\Twig_Environment $env)
    {
        $this->environment = $env;
    }


    public function getFunctions()
    {
        return array(
            'form_field' => new \Twig_SimpleFunction('form_field', array($this, 'formField'), array(
                'is_safe' => array('html')
            ))
        );
    }

    public function formField($form, $label = null)
    {
        $this->template = $this->environment->loadTemplate( '::Form/form_field.html.twig' );

        return $this->template->renderBlock('form_field', array(
            'form' => $form,
            'label' => $label
        ));
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'app_extension';
    }
}

我将DI容器配置为传递AppExtension服务的Twig_Environment:

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        arguments:
            - '@twig'
        tags:
            - { name: twig.extension }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

symfony2表单渲染自定义

来自分类Dev

Xamarin表单,DataTemplate与自定义渲染器

来自分类Dev

自定义Symfony2表单

来自分类Dev

Angular2的自定义渲染器

来自分类Dev

网格的自定义渲染器

来自分类Dev

网格的自定义渲染器

来自分类Dev

如何在Xamarin表单的自定义页面渲染器上实现mapbox?

来自分类Dev

Symfony2自定义验证限制了表单构建器中的使用

来自分类Dev

自定义symfony2嵌入表单模板

来自分类Dev

自定义渲染器功能在Handsontable插件中不起作用

来自分类Dev

自定义单元格渲染器

来自分类Dev

意外的Jtable自定义渲染器行为

来自分类Dev

自定义数据类型渲染器部署

来自分类Dev

Uno Platform自定义渲染器

来自分类Dev

PrimeFaces组件的自定义渲染器未注册

来自分类Dev

Highcharts:自定义渲染器的选项设置

来自分类Dev

如何自定义谷歌标记群集渲染器?

来自分类Dev

意外的Jtable自定义渲染器行为

来自分类Dev

Xamarin形成WinRT条目自定义渲染器

来自分类Dev

按钮的渐变背景 - 自定义渲染器

来自分类Dev

Xamarin 自定义渲染器更新值

来自分类Dev

Rails:了解自定义表单助手

来自分类Dev

symfony2自定义验证器FatalErrorException

来自分类Dev

如何在自定义渲染器中向左/向右滑动手势来更新Grid的BindingContext?

来自分类Dev

带有验证助手的自定义验证器

来自分类Dev

Symfony2自定义按钮

来自分类Dev

Symfony2自定义按钮

来自分类Dev

如何在自定义渲染器中渲染xamarin.forms视图

来自分类Dev

自定义渲染器未应用于表格渲染handsontable