【发布时间】:2016-03-22 09:05:59
【问题描述】:
我一直在开发一组用于移动应用的 REST API。我正在遵循 Laravel 项目开发的存储库模式。如何实现演示者和转换器,以便在我的所有 API 集中格式化恒定的 JSON 输出?
例如,我有以下用于登录的控制器
public function authenticate()
{
$request = Request::all();
try {
// If authenticated, issue JWT token
//Showing a dummy response
return $token;
} catch (ValidatorException $e) {
return Response::json([
'error' =>true,
'message' =>$e->getMessageBag()
]);
}
}
现在变形金刚和演示者在哪里出现?我知道两者都用于通过转换 db 对象来格式化输出并生成格式化的 JSON,以便它在我的 API 中保持统一。
dingo API 和分形甚至框架 (L5 repository) 没有提供详细的文档,我也找不到任何关于这方面的教程。
我为 另一个 API 创建了以下演示者和转换器,它提供了产品列表
namespace App\Api\V1\Transformers;
use App\Entities\Product;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract {
public function transform(\Product $product)
{
return [
'id' => (int) $product->products_id
];
}
}
演讲者
<?php
namespace App\Api\V1\Presenters;
use App\Api\V1\Transformers\ProductTransformer;
use Prettus\Repository\Presenter\FractalPresenter;
/**
* Class ProductPresenter
*
* @package namespace App\Presenters;
*/
class ProductPresenter extends FractalPresenter
{
/**
* Transformer
*
* @return \League\Fractal\TransformerAbstract
*/
public function getTransformer()
{
return new UserTransformer();
}
}
如何在控制器中设置演示者并做出响应?试过了
$this->repository->setPresenter("App\\Presenter\\PostPresenter");
但它似乎不起作用,文档没有显示完整的步骤。
- 在上面的示例中,如何为可以在我的 API 中使用的错误响应创建一个模板,以及如何将我的错误异常传递给它?
- 似乎presenter 和transformer 可用于将数据库对象 转换为可展示的JSON,而不是其他任何东西。对吗?
- 如何使用 Presenter 和 Transformer 来获得成功响应和错误响应?通过将异常而不是 DB 对象传递给转换器?
【问题讨论】:
标签: php json rest laravel dingo-api