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}。关于路径:。看见