Symfony Sylius:如何在网格渲染中注入自己记录的数据变量

Symfony Sylius:如何在网格渲染中注入自己记录的数据变量,symfony,grid,symfony4,inject,sylius,Symfony,Grid,Symfony4,Inject,Sylius,我想根据订单中的一些产品,在管理视图中为订单网格的通道显示添加一些内容。在示例中,我需要一种将记录的数据注入细枝模板的方法 我想不出来。网格如下所示: sylius_grid: grids: sylius_admin_order: driver: name: doctrine/orm options: class: "%sylius.model.

我想根据订单中的一些产品,在管理视图中为订单网格的通道显示添加一些内容。在示例中,我需要一种将记录的数据注入细枝模板的方法

我想不出来。网格如下所示:

sylius_grid:
    grids:
        sylius_admin_order:
            driver:
                name: doctrine/orm
                options:
                    class: "%sylius.model.order.class%"
                    repository:
                        method: createListQueryBuilder
            sorting:
                number: desc
            fields:
                ...
                channel:
                    type: twig
                    label: sylius.ui.channel
                    sortable: channel.code
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                    options:
                        template: ...
                        vars: 
                            labels: "@SyliusAdmin/Order/Label/State"
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                        vars: 
                            order: self
我看到在其他列中,他们在选项下添加了vars:

sylius_grid:
    grids:
        sylius_admin_order:
            driver:
                name: doctrine/orm
                options:
                    class: "%sylius.model.order.class%"
                    repository:
                        method: createListQueryBuilder
            sorting:
                number: desc
            fields:
                ...
                channel:
                    type: twig
                    label: sylius.ui.channel
                    sortable: channel.code
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                    options:
                        template: ...
                        vars: 
                            labels: "@SyliusAdmin/Order/Label/State"
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                        vars: 
                            order: self
但是如何处理它自己,我的意思是处理记录中的其他数据? 我需要这样的东西:

sylius_grid:
    grids:
        sylius_admin_order:
            driver:
                name: doctrine/orm
                options:
                    class: "%sylius.model.order.class%"
                    repository:
                        method: createListQueryBuilder
            sorting:
                number: desc
            fields:
                ...
                channel:
                    type: twig
                    label: sylius.ui.channel
                    sortable: channel.code
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                    options:
                        template: ...
                        vars: 
                            labels: "@SyliusAdmin/Order/Label/State"
                    options:
                        template: "@SyliusAdmin/Order/Grid/Field/channel.html.twig"
                        vars: 
                            order: self

有人知道这样做的方法吗?

简而言之,您应该创建一个新模板,并将其路径设置为网格字段选项->模板。然后在该模板中使用{options.vars.order}获取变量

工作原理:

Sylius Grid在渲染时将选项变量传递到模板中。例如,“外观”标准标签参数:

@SyliusAdmin/config/grids/order.yml中的网格定义:

...
                paymentState:
                    type: twig
                    label: sylius.ui.payment_state
                    sortable: ~
                    options:
                        template: "@SyliusUi/Grid/Field/state.html.twig"
                        vars:
                            labels: 
...
@SyliusUi/Grid/Field/label.html.twig:

{% set value = 'sylius.ui.' ~ data %}

{% if options.vars.labels is defined %}
    {% include [(options.vars.labels ~ '/' ~ data ~ '.html.twig'), '@SyliusUi/Label/_default.html.twig'] with {'value': value} %}
{% else %}
    {% include '@SyliusUi/Label/_default.html.twig' with {'value': value} %}
{% endif %}
在本例中,传递的变量标签(在网格Yaml定义中传递)在Twig options.vars.labels变量中可用

编辑:如果要访问模板中的实体对象其他属性,而不仅仅是本例中的通道,请将其添加到网格字段定义根目录中:

                channel:
                    type: twig
                    label: sylius.ui.channel
                    path: .

您可能需要使用php bin/console cache:clear刷新细枝缓存。请在

中阅读更多信息,谢谢您的回答!但问题是:如何使options.vars.order填充正确的值?我是否需要扩展ResourceController并在代码中手动设置order变量?或者我可以在网格定义中这样做吗?编辑:很抱歉,我不认为需要在网格定义中定义它,您可以在模板中使用{{data}}吗?在您的案例中,数据将包含Order ObjectThank。但不幸的是{data}}只包含通道的名称,而不包含分配给通道的顺序记录。编辑:这是网格定义所在的模板@SyliusAdmin/Order/Grid/Field/channel.html.twig:AdminBundle/Resources/config/grids/Order.ymlsorry,在这种情况下放置路径:。下面的类型:twig line。它将使您的{data}具有整个对象而不是对象字段值是的,您还应该在/templates dir中创建自己的模板,并将其路径与以下模板类似:custom.html.twig而不是SyliusAdmin/Order/Grid/field/channel.html.twig。然后在模板中编写自己的逻辑,例如,{{dumpdata}。关于路径:。看见