【问题标题】:Form theming datetime widget Symfony 2表单主题日期时间小部件 Symfony 2
【发布时间】:2012-03-15 06:46:40
【问题描述】:

我喜欢在我的表单中“形成主题”我的日期时间小部件。 我在其中创建了一个 fields.html.twig 文件:

{% block datetime_widget %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
        {{ '{{ day }}-{{ month }}-{{ year }}'|replace({
            '{{ day }}': form_widget(form.day),
            '{{ month }}': form_widget(form.month),
            '{{ year }}': form_widget(form.year),
        })|raw }}
        {{ form_widget(form.hour, { 'attr': { 'size': '1' } }) }} : {{ form_widget(form.minute, { 'attr': { 'size': '1' } }) }} : {{ form_widget(form.second, { 'attr': { 'size': '1' } }) }}
    </div>
{% endspaceless %}
{% endblock datetime_widget %}

我在表单视图模板中输入了这一行

{% form_theme form 'AcmeDashboardBundle:Form:fields.html.twig' %}

日期时间小部件被渲染。但日期和时间部分位于单独的 div 元素中。它将小部件分成两行。我想将日期和时间部分并排显示。

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    要实现这一点,您必须重新定义 datetime_widget 而不使用内置的 date_widget 和 time_widget(因为它们每个都用 div 包装),或者您可以重新定义 date_widget 和 time_widget 以删除它们的包装 div。

    下面是第一个选项的实现方法:

    {% extends 'form_div_layout.html.twig' %}
    
    {% block datetime_widget %}
    {% spaceless %}
        {% if widget == 'single_text' %}1
            {{ block('field_widget') }}
        {% else %}
            <div {{ block('widget_container_attributes') }}>
                {{ form_errors(form.date.year) }}
                {{ form_errors(form.date.month) }}
                {{ form_errors(form.date.day) }}
                {{ form_errors(form.time) }}
                {{ form_widget(form.date.year) }}
                {{ form_widget(form.date.month) }}
                {{ form_widget(form.date.day) }}
            {{ form_widget(form.time.hour, { 'attr': { 'size': '1' } }) }}:{{ form_widget(form.time.minute, { 'attr': { 'size': '1' } }) }}
            </div>
        {% endif %}
    {% endspaceless %}
    {% endblock datetime_widget %}
    

    下面是第二个选项的实现方法:

    {% extends 'form_div_layout.html.twig' %}
    
    {% block date_widget %}
    {% spaceless %}
        {% if widget == 'single_text' %}
            {{ block('field_widget') }}
        {% else %}
            {{ date_pattern|replace({
                '{{ year }}':  form_widget(form.year),
                '{{ month }}': form_widget(form.month),
                '{{ day }}':   form_widget(form.day),
            })|raw }}
        {% endif %}
    {% endspaceless %}
    {% endblock date_widget %}
    
    {% block time_widget %}
    {% spaceless %}
        {% if widget == 'single_text' %}
            {{ block('field_widget') }}
        {% else %}
            {{ form_widget(form.hour, { 'attr': { 'size': '1' } }) }}:{{ form_widget(form.minute, { 'attr': { 'size': '1' } }) }}{% if with_seconds %}:{{ form_widget(form.second, { 'attr': { 'size': '1' } }) }}{% endif %}
        {% endif %}
    {% endspaceless %}
    {% endblock time_widget %}
    

    那么日期和时间将在同一个 div 中。显然,您可以通过添加所需的 html 在日期和时间之间添加一些空格

    希望有帮助!

    【讨论】:

    • 感谢您的回复!它告诉我“变量 'date_pattern' 不存在”
    • 啊哈,是的,它通常会从 symfony 的 DateType 类中得到。它只是指定了日期的格式,因此您可以将变量替换为'{{ year }}-{{ month }}-{{ day }}',或者根据需要重新排列
    • 我现在收到此错误:哈希键必须后跟冒号 (:)。值“(”的意外标记“标点符号”(“标点符号”应为值“:”)(我已经编辑了我的第一篇文章)
    • 解决了上述问题。但现在我得到:对象“Symfony\Component\Form\FormView”的方法“day”不存在
    • 是的,这也是我得到的。仍在调查:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多