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
相关产品推荐
相关产品推荐

