samj / fractal-bundle
该包已被废弃,不再维护。没有建议的替代包。
League 的 Fractal 的 Symfony Bundle。实现将依赖注入到你的转换器中
4.0.0
2020-06-19 12:31 UTC
Requires
- php: >=7.0
- league/fractal: ~0.17
- symfony/framework-bundle: ^3.0|^4.0|^5.0
Requires (Dev)
- symfony/yaml: ^4.0|^5.0
README
本包提供了 league/fractal 的集成,用于 Symfony。此外,它还允许您使用 转换器作为服务。
入门
首先,您需要在 composer.json 中添加依赖项
composer require samj/fractal-bundle
然后在 app/AppKernel.php
中注册 Bundle
public function registerBundles() { return [ // ... new SamJ\FractalBundle\SamJFractalBundle(), ]; }
现在我们可以编写和使用 fractal 转换器
将转换器用作服务
在某些情况下,您需要将一些依赖项传递到转换器中。一个常见的情况是在转换器中进行基于角色/范围的查询结果。例如,您需要只为管理员或用户资料的拥有者显示 email
字段
class UserTransformer extends TransformerAbstract { private $authorizationCheker; public function __construct(AuthorizationChecker $authorizationCheker) { $this->authorizationCheker = $authorizationCheker; } public function transform(User $user) { $data = [ 'id' => $user->id(), 'name' => $user->name(), ]; if ($this->authorizationChecker->isGranted(UserVoter::SEE_EMAIL, $user)) { $data['email'] = $user->email(); } return $data; } }
然后,您只需将此类注册为服务,并将服务 ID 作为转换器传递。然后,此 Bundle 将尝试从容器中获取它
$resource = new Collection($users, 'app.transformer.user');
这也可以在包含中工作
public function includeFriends(User $user) { return $this->collection($user->friends(), 'app.transformer.user'); }
您可以在 示例应用程序 中看到如何使用转换器的示例,该应用程序用于测试套件。