📜  创建 laravel 资源 - PHP (1)

📅  最后修改于: 2023-12-03 15:07:11.331000             🧑  作者: Mango

创建 Laravel 资源 - PHP

在 Laravel 中创建资源(Resource)可以让我们更快捷地对数据进行操作。资源可以将模型转换成 JSON 格式,并可以添加额外的数据、链接和元数据,以此来方便地构建 API。

首先,我们需要创建一个命令行的 PHP 文件,比如 php artisan make:resource PostResource,该文件应该位于 app/Http/Resources 目录下面。

接着我们需要在该文件中定义转换数据的方法,方法名称包括 toArraytoJson、以及 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 中创建资源。资源功能十分强大,可以大幅简化我们对数据的操作。