laravel-admin Grid类display方法传入闭包调用不到本类的方法?

2022-03-22 17:21:42

laravel-admin Grid类display方法传入闭包调用不到本类的方法?

代码如下:

    protected function grid()
    {
        ......
        $grid->column('img_url', __('Img url'))->display(function ($value) {
            return "<img src='".$this->getImgUrl($value)."' style='width: 10rem;'>";
        });
        ......
        return $grid;
    }

一眼瞅去 没啥毛病,运行却报错:对应model没有getImgUrl方法,正常情况应该是调用的是本类getImgUrl才对,检测几次只有看源码发现: EncoreAdminGridColumn::bindOriginalRowModel 这个地方导致, 顺手记录一下

解决

对应Model或抽出Model基类 封装需要调用的方法

复现

打开B类中的注释会报错

<?php

class A
{
    public function echo6()
    {
        echo "666\n";
    }

    public function funcEcho(): Closure
    {
        return function () {
            echo "funcEcho\n";
            $this->echo6();
        };
    }
}

class B
{
    public function echoB(Closure $fun)
    {
        // $fun = $fun->bindTo($this);
        $fun();
    }
}

$a = new A();

$b = new B();

$b->echoB($a->funcEcho());

 

本文由"putyy"原创,转载无需和我联系,但请注明来自putyy
您的浏览器不支持canvas标签,请您更换浏览器