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());