Laravel。有没有办法将 API 资源作为参数传递?

Laravel. Is there a way to pass an API Resource as a parameter?

我熟悉 Laravel Api Resources 的用法,我曾将它用于单个元素,例如:

return new JsonResource($theResource)

以及具有以下元素的集合:

return JsonResource::Collection($theResources)

但现在我想将 jsonResource 传递给另一个 class 或方法,并且能够做同样的事情,例如做类似的事情:

$theJsonResource->collection($theResources)

有办法吗?

在 PHP 中,您可以将 类 传递给方法或将 类 作为字符串引用传递,这将对您的情况有所帮助。新关键字相当简单,对于静态调用,您必须使用一些 PHP 技巧。

class ResponseBuilder
{
    private $resource;

    public function __construct($resource)
    {
        $this->resource = $resource;
    }

    public function buildRessource($resource)
    {
        return new $this->resource($resource);
    }

    public function buildRessources($resources)
    {
        return call_user_func($this->resource .'::Collection', $resources);
    }
}