Dcat Admin中内置了多种常用数据统计卡片,可以非常方便的与后端 API 交互。但是与后端API交互时的传参方法官方文档给出的示例代码中存在错误,导致我们按照官方文档的代码无法正确传参,本文就说明下正确的传参方式。

首先、要在数据统计卡片中定义构造方法并接受自定义参数。

    // 保存自定义参数
    protected $data = [];

    // 构造方法参数必须设置默认值
    public function __construct(array $data = []) 
    {
        //官方示例代码错误
        //$this->data = [];        //正确的代码
        $this->data = $data;

        parent::__construct();
    }

注意,官方示例代码就是这里错了,示例代码中使用的$this->data = [];,给数据卡片的自定义参数赋值的是空数组,当然永远获取不到正确的参数了。实际要改成$this->data = $data;,这样就可以正确的获取自定义参数了。

接下来、按照官方手册的说明,我们还需要在数据卡片中实现下面的方法。

namespace AppAdminMetricsExamples;

use DcatAdminWidgetsMetricsCard;
use IlluminateContractsSupportRenderable;
use IlluminateHttpRequest;

class TestChart extends Card
{
    // 保存自定义参数
    protected $data = [];

    // 构造方法参数必须设置默认值
    public function __construct(array $data = []) 
    {
        $this->data = $data;
        parent::__construct();
    }

    // 传递自定义参数到 handle 方法
    public function parameters() : array
    {
        return $this->data;
    }
    // 处理请求
    public function handle(Request $request)
    {
        // 获取外部传递的自定义参数
        $url = $request->get('url');
    }

    //代码省略部分......
}

最后,在调用数据统计卡片时,加上要传递的参数即可。

    use AppAdminChartsTestChart;

    ......

    $chart = new TestChart(['url'=>"https://www.codesou.cn"]);