0

我正在使用 Lumen 和 Dingo 构建一个 API,并按照Dingo Wiki中的概述实现 Transformers ,并且我正在按照Fractal Transformers 文档中的概述配置包含选项。

我发现如何在 Controller 中作为闭包来执行此操作,但我觉得可能有更好的地方添加它,以便全局使用 parseIncludes 方法,而不是在每个返回中使用。以下是一些代码示例:

用户控制器.php

    public function show($user_id)
    {
        $user = User::findOrFail($user_id);
        return $this->response->item($user, new UserTransformer, [], function($resource, $fractal){
            if(isset($_GET['include'])){
                $fractal->parseIncludes(explode(',', $_GET['include']));
            }
        });
    }

用户变压器.php

<?php

namespace App\Http\Transformers;

use App\Models\User;
use League\Fractal\TransformerAbstract;
use App\Http\Transformers\RoleTransformer;
use App\Http\Transformers\CompanyTransformer;

class UserTransformer extends TransformerAbstract
{

    protected $availableIncludes = [
        'roles',
        'company',
        'timestamps'
    ];

    public function transform(User $user)
    {

        return [
            'id' => (string) $user->id,
            'company_id' => (string) $user->company_id,
            'first_name' => (string) $user->first_name,
            'last_name' => (string) $user->last_name,
            'email' => (string) $user->email,
            'phone' => (string) $user->phone,
            'created_at' => (string) $user->created_at,
            'updated_at' => (string) $user->updated_at
        ];
    }

    public function includeRoles(User $user)
    {
        $roles = $user->roles;

        return $this->collection($roles, new RoleTransformer);
    }

    public function includeCompany(User $user)
    {
        $company = $user->company;

        return $this->item($company, new CompanyTransformer);
    }
}

虽然此设置有效,但它需要我将该闭包添加到我想要包含的控制器中的每个响应中。有没有办法可以设置 Transformer 来检查所有请求的包含参数和 parseIncludes?

PHP: 7.4

流明:8.3.2

野狗:3.0.7

4

0 回答 0