divspace/responder

用于处理API响应的Laravel 4包装器,基于Fractal

v1.0.1 2015-11-05 19:29 UTC

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'
)

用法

您可以返回以下三种类型的响应:

  1. 项目
  2. 集合
  3. 分页集合

以下是在单个控制器中这三种类型的示例:

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响应的默认提供程序。