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

Sonata Admin仪表盘带参数Action报错:filter需标量类型如何解决?

Sonata Admin仪表盘配置带参数Action的问题及解决办法

问题场景

配置Sonata Admin仪表盘时,尝试添加带参数的Action,使用的配置代码如下:

groups:
    panel:
        items:
            -   route: 'admin_app_order_list' 
                route_params: { filter: { group: { value: 'active' } } }
                label: test

执行后触发如下错误:

Invalid type for path "sonata_admin.dashboard.groups.panel.items.0.route_params.filter". Expected "scalar", but got "array".

疑问

  • 为何参数filter要求为标量类型?
  • 是否存在可行的修复方案?

原因分析

Sonata Admin仪表盘的route_params配置项,是直接映射到HTTP请求的查询参数。而HTTP查询参数本质上都是字符串(标量类型),不支持嵌套数组的结构。框架的配置验证机制会严格校验参数类型,因此传入嵌套数组格式的filter时,就会触发类型不匹配的错误。

修复方案

方案1:使用扁平化的查询参数格式

Sonata Admin的列表过滤器支持扁平化的查询参数格式,你可以把嵌套数组转换成filter[group][value]这种键名形式,配置示例如下:

groups:
    panel:
        items:
            -   route: 'admin_app_order_list' 
                route_params:
                    filter[group][value]: 'active'
                label: test

这种方式直接符合HTTP查询参数的格式要求,能被Sonata Admin正确解析并应用过滤器。

方案2:自定义路由与Controller方法(更灵活)

如果需要更复杂的过滤逻辑,或者不想在配置里写冗长的参数键名,可以自定义路由和对应的Controller方法:

  1. 添加自定义路由
    在config/routes.yaml中新增路由:
admin_app_order_active_list:
    path: /admin/app/order/list/active
    controller: App\Controller\Admin\OrderAdminController::listActiveAction
  1. 实现Controller方法
    创建或修改对应的Admin Controller,预设过滤参数:
// src/Controller/Admin/OrderAdminController.php
namespace App\Controller\Admin;

use Sonata\AdminBundle\Controller\CRUDController;

class OrderAdminController extends CRUDController
{
    public function listActiveAction()
    {
        // 预先设置过滤器参数,指定group为active
        $this->admin->setFilterParameters(['group' => ['value' => 'active']]);
        // 调用原生的listAction渲染列表页
        return $this->listAction();
    }
}
  1. 更新仪表盘配置
    在仪表盘配置中直接使用这个自定义路由:
groups:
    panel:
        items:
            -   route: 'admin_app_order_active_list' 
                label: test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:17:21