我正在使用 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