Example 13-20. Using the default API resource collection method
use App\Dog;
use App\Http\Resources\Dog as DogResource;
Route::get('dogs', function () {
return DogResource::collection(Dog::all());
});
为了做到这一点,我们再次使用make:resource命令行工具,这次我们命名为DogCollection,这将告诉Laravel 创建一个API 资源结合,而不仅仅是API 资源。
php artisan make:resource DogCollection
这将生成一个与api资源文件非常相似的新文件,位于app/Http/ Resources/DogCollection.php,其中再次包含一个方法:toArray()。
Example 13-21. Generated API resource collection
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class DogCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
就像API资源一样,我们可以访问请求和底层数据。 但与API资源不同,我们处理的是项目集合而不仅仅是一个项目,因此我们将以$this- >collection的形式访问已经转换的集合。 以示例13-22为例.
Example 13-22. A simple API resource collection for the Dog model
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class DogCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => $this->collection,
'links' => [
'self' => route('dogs.index'),
],
];
}
}