📅  最后修改于: 2023-12-03 15:07:11.331000             🧑  作者: Mango
在 Laravel 中创建资源(Resource)可以让我们更快捷地对数据进行操作。资源可以将模型转换成 JSON 格式,并可以添加额外的数据、链接和元数据,以此来方便地构建 API。
首先,我们需要创建一个命令行的 PHP 文件,比如 php artisan make:resource PostResource
,该文件应该位于 app/Http/Resources
目录下面。
接着我们需要在该文件中定义转换数据的方法,方法名称包括 toArray
、toJson
、以及 toResponse
。以下是一个简单的例子:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'title' => $this->title,
'body' => $this->body,
'created_at' => $this->created_at->format('Y-m-d H:i:s')
];
}
}
以上代码会将 Post 模型转换成如下的 JSON 格式:
{
"data": {
"title": "My Post Title",
"body": "Body content of my post.",
"created_at": "2021-07-30 12:00:00"
}
}
接下来,我们可以在控制器中使用该资源进行数据转换,比如:
use App\Http\Resources\PostResource;
$post = Post::findOrFail($id);
return new PostResource($post);
以上代码会将 Post 模型转换成相应的 JSON 格式。
除了使用 toJson
方法将资源转换为 JSON 格式,我们还可以使用 additional
方法来添加额外的数据、链接和元数据。以下是一个例子:
public function toArray($request)
{
return [
'title' => $this->title,
'body' => $this->body,
'created_at' => $this->created_at->format('Y-m-d H:i:s')
] + $this->extraData();
}
public function with($request)
{
return [
'links' => [
'self' => url('/posts/'.$this->id),
],
];
}
private function extraData()
{
return [
'foo' => 'bar',
];
}
以上代码中,extraData
方法用来添加额外的数据,with
方法用来添加链接,toArray
方法则将这些数据整合到 JSON 格式中。最终转换后的数据格式如下:
{
"data": {
"title": "My Post Title",
"body": "Body content of my post.",
"created_at": "2021-07-30 12:00:00",
"foo": "bar"
},
"links": {
"self": "http://example.com/posts/1"
}
}
至此,我们已经学习了如何在 Laravel 中创建资源。资源功能十分强大,可以大幅简化我们对数据的操作。