【问题标题】:Symfony - pass custom data from Form Builder to form themeSymfony - 将自定义数据从表单生成器传递给表单主题
【发布时间】:2017-03-18 23:24:42
【问题描述】:

我想围绕我的一堆字段设置一个特殊的 div。为此,我想向表单构建器中添加一些可以在我的 form_theme 中检测到的内容,并在 div 存在时设置它。

我尝试添加

->add('field', new myCustomType(), array('inherit_data' => true, "label" => false, "required" => false, 'attr' => array("test" => "aaa")))

到表单构建器,设置自定义属性,它实际上作为属性呈现在 html 中......但我无法在表单主题中检测到它。

{{ block('widget_container_attributes') }}

只给出widget属性,而

{{ block('row_container_attributes') }}

不起作用。实际上,我很难在网上找到任何关于表单主题的blocks 中可用的变量以及如何使用它们的资源(已经很难知道如何调用块)。

我在官方网站上寻找了更多信息,here 主要是但没有任何成功......

感谢您的帮助!

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    如果你把它放在你的表单生成器中,那么你还不如永久设置在你的模板中。如果设置数据需要一些逻辑,那么无论如何它都属于您的控制器,所以只需将其放在那里即可。

    控制器:

    public function someAction()
    {
    
        // ....
    
        return $this->render('some_twig_template.twig.html', array(
            'attr' => array("test" => "aaa")
        );
    }
    

    然后在你的树枝模板中

    {{ dump(attr) }}
    {{ dump(attr.test) }}
    

    编辑: 要每次都在模板中渲染,您可以直接在渲染字段上设置一个类:

    {{ form_label(form.field, 'My label', { 'label_attr': {'class': 'js-hidden-row'} }) }}
    {{ form_widget(form.field, { 'attr': {'class': 'js-hidden-row'} }) }}
    

    然后在我的javascript中你可以用一些简单的jQuery隐藏:

    <script>
        jQuery(document).ready(function() {
            $('.js-hidden-row').hide();
        });
    </script>
    

    【讨论】:

    • 您好,感谢您的帮助!实际上这不是真正的逻辑,它更像是一个展示的东西。我希望默认情况下隐藏一些 div,并带有一个可点击的按钮来显示它......所以我想在表单构建器中设置属性,在那个特定的字段上,所以在检测属性时在表单主题中我可以使用hide 类设置一个div 并添加按钮...我想我可以通过在其html 中一个接一个地定义表单字段而不使用{{ form(form) }} 来在模板本身中做到这一点,但我很惊讶没有设置这样的简单方法...
    • 有道理。我仍然会争辩说不要把它放在表单构建器中。由于您想每次都在该字段上呈现,只需将其放入您的模板中。我将修改我的答案以显示我是如何做到的。
    • 谢谢,我就是这样开始的!
    猜你喜欢
    • 2019-05-23
    • 2019-02-18
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2010-10-12
    • 2014-08-23
    相关资源
    最近更新 更多