0

我想引用一个私有函数作为 Cache::remember 函数的第三个参数。

取而代之的是(删除了 try{}catch() 以获得更简洁的代码)

class ApiController extends Controller
{

    public function index(){
        $data = Cache::remember('dataKey', 60, function () {
            return Model::multipleMethodsHere()->get();
        });
        return response()->json($data,200);
    }
}

我想这样做:

class ApiController extends Controller
{

    public function index(){
        $data = Cache::remember('dataKey', 60, $this->getIndex());
        return response()->json($data,200);
    }
    private function getIndex(){
        return Model::....->get();
    }
}

如果我尝试引用私有函数,则会收到此错误。

Argument 3 passed to Illuminate\\Cache\\Repository::remember() must be an instance of Closure, instance of Illuminate\\Database\\Eloquent\\Collection given

可能吗 ?如果是,我该怎么办?

4

1 回答 1

1

根据对 OP 的讨论中的评论,重新制定策略Cache:remember使其成为getIndex功能的一部分,例如:

class ApiController extends Controller
{

    public function index(){
        $data = $this->getIndex();
        return response()->json($data,200);
    }

    private function getIndex(string $dataKey = 'dataKey', int $time = 60){
        return Cache::remember($dataKey, $time, function () {
               return Model::....->get();
            })
          
    }
}
于 2022-01-25T20:54:15.560 回答