【问题标题】:Member filter in TwigTwig 中的成员过滤器
【发布时间】:2013-03-15 16:41:59
【问题描述】:

我有一些类别和项目。我希望能够仅删除尚未设置项目的类别。例如,我有书籍类别,但没有添加具体书籍,因此我可以将其删除。我有食品类别,其中有比萨饼、三明治、苹果——所以我不能删除它。我在想如何最好地做到这一点。

<table class="table table table-striped spacer">
    {% for c in cat %}
        <tr>
            <td>
                {# If in edit mode, display edit form #}
                {% if id == c.id %}

                <form class="form-inline" action="{{ path('edit_category', {'id': c.id}) }}" method="post" {{ form_enctype(form) }}>

                    {% form_theme form 'EMBudgetTrackerBundle:Forms:inputs.html.twig' %}

                    {% for field in form %}
                    {{ form_row(field) }}
                    {% endfor %}

                    <button type="submit" class="btn"><i class="icon-ok"></i></button>

                </form>

                {# Else display the name #}
                {% else %}
                    {{ c.name }} 
                    <a href="{{ path('edit_category', {'id': c.id}) }}"><i class="icon-pencil"> </i></a> 
                    <a href="{{ path('delete_category', {'id': c.id}) }}"> <i class="icon-remove"></i></a> 
                {% endif %}
            </td>
        </tr>
    {% endfor %}
</table>

这是我为每个类别所做的。我想要的是如果有添加的项目,不提供删除链接。我唯一能想到的就是有两个数组——一个是带有项目的类别,另一个是没有项目的类别,并且对于这两个数组都使用了这个 for 循环。但这会导致代码重复——一切都是一样的,只有一个循环不会有&lt;a href="{{ path('delete_category', {'id': c.id}) }}"&gt; &lt;i class="icon-remove"&gt;&lt;/i&gt;&lt;/a&gt;这一行,而且看起来不是很优雅。我在想类似的东西

if(c.name not member of array_with_categories_without_items) 
then display the delete link

但我不知道是否有办法做到这一点。有人可以给我一些想法吗?非常感谢您! :)

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    根据您的应用程序,您可以做几件事。

    我的偏好是显示所有类别的删除链接,并在您的实际删除页面上进行验证。这有几个额外的好处:

    • 让您在删除页面上考虑这个逻辑。当用户去删除一个类别时,许多人陷入了隐藏他们忘记实际检查该逻辑的链接中。这意味着,如果他们手动更改删除链接以将类别 ID 包含在项目中,您的应用程序将很乐意将其删除。
    • 降低整个应用程序的复杂性。并不是说一个简单的 MySQL 查询会使您的应用程序更复杂,但它肯定有助于视图层在没有条件逻辑来显示链接的情况下表现得更清晰
    • 减少服务器负载。在打印删除链接之前,您不必检查每个类别中的子项(尽管,根据您的设置,这可能是一个便宜的操作)
    • 它让用户知道发生了什么。否则,在不了解您的应用程序的情况下,他们会想知道为什么没有删除链接。如果他们有一个删除链接,如果他们点击它就会显示一个错误,这将告诉他们如果他们想删除一个类别,他们需要删除所有子项。

    话虽如此,您可以这样做:

    SELECT
        c.category_name,
        c.category_id,
        COUNT(f.food_id) AS children
    FROM 
        categories c
        LEFT JOIN food f ON (c.category_id = f.food_id)
    GROUP BY
        c.category_id
    

    这显然是在猜测您的数据库结构,但这会为您提供一个类别列表,其中包含每个类别的子项计数

    【讨论】:

    • 非常感谢您的想法! :)
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2017-03-08
    相关资源
    最近更新 更多