You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oro CRM/Platform数据网格行数据传控制器失败:动作无请求参数

解决Oro数据网格Send动作传递参数失败的问题

你的问题核心在于Send动作的配置没有绑定行数据的参数,导致点击动作时请求无法携带任何行相关信息。下面是具体的修复步骤:

1. 修改数据网格动作配置,添加参数传递

你需要在actions.send的配置里,把行数据中的参数(比如itemId)绑定到请求URL上,有两种常用实现方式:

方式一:直接在link中使用Twig占位符

修改data_grids.yml里的send动作配置,在link后拼接参数:

datagrids:
  app-demo-grid:
    # 其他原有配置...
    actions:
      send:
        type: navigate
        label: Send to Url
        link: send_link?itemId={{ itemId }}  # 用Twig占位符引用列字段
        icon: send
        rowAction: true

这里的{{ itemId }}对应你columns里定义的itemId字段,点击时会自动替换为当前行的实际值。

方式二:使用路由(推荐,更符合Oro规范)

如果你的控制器是通过路由配置的,建议用route和route_parameters生成带参数的链接:

datagrids:
  app-demo-grid:
    # 其他原有配置...
    actions:
      send:
        type: navigate
        label: Send to Url
        route: app_demo_send  # 替换成你实际的路由名称
        route_parameters:
          itemId: "{{ itemId }}"  # 绑定行数据的itemId到路由参数
        icon: send
        rowAction: true

2. 确保路由配置正确(针对方式二)

在你的routing.yml里定义对应的路由,指定参数:

app_demo_send:
    path: /demo/send/{itemId}
    defaults: { _controller: DemoBundle:Demo:send }

3. 控制器中接收参数

在对应的控制器方法里,就可以直接获取传递的参数了:

// DemoBundle/Controller/DemoController.php
public function sendAction($itemId)
{
    // 这里就能拿到传递过来的itemId参数
    // 编写你的业务逻辑...
}

关键注意点

  • 占位符里的字段名要和你columns里定义的一致(比如这里的itemId),也可以直接用查询里的别名+字段名,比如{{ po.itemId }}
  • 使用route_parameters时,占位符必须用双引号括起来,否则Twig语法不会生效
  • 确保路由中的参数名称和route_parameters里的键名完全匹配

内容的提问来源于stack exchange,提问作者nifCody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:28:45