Aje*_*esh 9 php rest json laravel dingo-api
我一直在开发一套针对移动应用程序公开的其他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()
]);
}
}
Run Code Online (Sandbox Code Playgroud)
现在变压器和演示者在哪里?我知道两者都用于通过转换db对象来格式化输出,并生成格式化的JSON,以便它在我的API中保持一致.
dingo API和fractal甚至框架(L5存储库)都没有提供详细的文档,我找不到任何相关的教程.
我为另一个 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
];
}
}
Run Code Online (Sandbox Code Playgroud)
主持人
<?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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何在控制器中设置演示者并回复?试着
$this->repository->setPresenter("App\\Presenter\\PostPresenter");
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,文档没有显示完整的步骤.
tix*_*ix3 -1
分形在这里有完整的记录:http://fractal.thephpleague.com/ 我经常从 Phil Sturgeon 那里读一本很棒的书https://leanpub.com/build-apis-you-wont-hate你可以找到大多数github 上提供的书籍代码https://github.com/philsturgeon/build-apis-you-wont-hate。您可以在那里找到非常好的分形示例。
Transformers 以一致的 json 格式转换对象,以便所有端点为每个实体返回相同的内容。
对此确实没有答案