gpt4 book ai didi

php - Laravel+Dingo 中一致的 REST API 响应

转载 作者:可可西里 更新时间:2023-11-01 12:20:58 25 4
gpt4 key购买 nike

我一直在开发一组用于移动应用程序的 rest API。我正在遵循 Laravel 项目开发的存储库模式。我如何实现演示器和转换器,以便在我的所有 API 集合中格式化常量 JSON 输出?

例如我有以下登录 Controller

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 和 fractal 甚至框架 ( 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();
}
}

我将如何在 Controller 中设置演示者并响应?尝试过

$this->repository->setPresenter("App\\Presenter\\PostPresenter");

但它似乎不起作用,文档也没有显示完整的步骤。

  1. 在上面的例子中,我如何制作一个我可以在我的 API 中使用的错误响应模板,以及我如何将我的错误异常传递给它?
  2. 似乎可以使用 presenter 和 transformer 将数据库对象 转换为可呈现的 JSON 而不是其他任何东西。对吗?
  3. 如何使用演示器和转换器来进行成功响应和错误响应?通过将异常而不是 DB 对象传递给转换器?

最佳答案

我遇到了同样的问题,下面是我如何将 dingo 与 transformer 一起使用

Controller :

public function update(Request $request)
{

$bus = new CommandBus([
$this->commandHandlerMiddleware
]);

$agency = $bus->handle(
new UpdateAgencyCommand($request->user()->getId(), $request->route('id'), $request->only('name'))
);

return $this->response->item($agency, new AgencyTransformer());
}

变形金刚:

class AgencyTransformer extends TransformerAbstract
{
public function transform(AgencyEntity $agencyEntity)
{
return [
'id' => (int) $agencyEntity->getId(),
'name' => $agencyEntity->getName(),
];
}
}

这就是我处理错误的方式:

throw new UpdateResourceFailedException('Could not update agency.', $this->agencyUpdateValidator->errors());

关于php - Laravel+Dingo 中一致的 REST API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com