divspace / responder
用于处理API响应的Laravel 4包装器,基于Fractal
v1.0.1
2015-11-05 19:29 UTC
Requires
- php: >=5.4.0
- illuminate/pagination: 4.2.*
- illuminate/support: 4.2.*
- league/fractal: 0.11.*
Provides
- league/fractal: 0.11.*
This package is not auto-updated.
Last update: 2024-09-14 18:20:31 UTC
README
Laravel 4版的用于处理API响应的Fractal包装器。对于Laravel 5,请点击此处。
安装
通过以下命令将Responder添加到您的composer.json
文件中:
$ composer require divspace/responder
然后运行以下命令:
$ composer update
注册包
将以下行添加到app/config/app.php
文件中的providers
数组末尾:
'providers' => array( // ... 'Divspace\Responder\ResponderServiceProvider' )
用法
您可以返回以下三种类型的响应:
- 项目
- 集合
- 分页集合
以下是在单个控制器中这三种类型的示例:
use Divspace\Responder\Responder; use Data\Transformers\UserTransformer; class UserController extends BaseController { protected $response; public function __construct(Responder $response) { $this->response = $response; /** * Fractal parseIncludes() method * http://fractal.thephpleague.com/transformers/ */ if(isset($_GET['include'])) { $this->response->parseIncludes($_GET['include']); } } /** * Display a paginated list of users */ public function index() { return $this->response->paginatedCollection(User::paginate()); } /** * Display a single user */ public function item($id) { return $this->response->item(User::find($id), new UserTransformer()); } /** * Display all users */ public function collection() { return $this->response->collection(User::all(), new UserTransformer()); } }
Data\Transformers\UserTransformers
文件可能看起来像这样(包含如何使用前一个示例中的parseIncludes()
方法的示例):
<?php namespace Data\Transformers; use User; use League\Fractal\TransformerAbstract; class UserTransformer extends TransformerAbstract { protected $defaultIncludes = [ 'user_type' ]; public function transform(User $user) { $user = User::find($user->id); return [ 'id' => (int) $user->id, 'email' => $user->email, 'created_at' => $user->created_at, 'updated_at' => $user->updated_at, ]; } public function includeUserType(User $user) { $userType = $user->type; return $this->item($userType, new UserTypeTransformer); } }
由于我们在前一个示例中使用了parseIncludes()
方法,因此我们需要创建该文件,以便在API响应中返回更多信息。
<?php namespace Data\Transformers; use User; use League\Fractal\TransformerAbstract; class UserTypeTransformer extends TransformerAbstract { public function transform($userType) { if(count($userType) > 0) { return [ 'id' => (int) $userType->id, 'name' => $userType->name ]; } return []; } }
您需要参考完整的Fractal文档来了解所有功能是如何协同工作的。
致谢
这是对Larasponse的修改版分支,用于Laravel 4.2,它使用Fractal作为API响应的默认提供程序。