nvmcommunity / laravel-mongodb-api
0.0.1
2024-07-11 10:53 UTC
Requires
- php: ^8.1
- mongodb/laravel-mongodb: ^4.6
- nvmcommunity/alchemist-restful-api: ^2.0
This package is auto-updated.
Last update: 2024-07-12 03:17:31 UTC
README
使用Alchemist Restful API轻松从API请求构建MongoDB查询。
描述
这是一个帮助您将Alchemist Restful API与Laravel MongoDB集成的包。有关Alchemist Restful API的概念和用法更多信息,请参阅Alchemist Restful API文档
安装
composer require nvmcommunity/laravel-mongodb-api
基本用法
步骤 1: 定义API类
<?php use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException; use Nvmcommunity\Alchemist\RestfulApi\Common\Integrations\AlchemistQueryable; use Nvmcommunity\Alchemist\RestfulApi\FieldSelector\Handlers\FieldSelector; use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Handlers\ResourceFilter; use Nvmcommunity\Alchemist\RestfulApi\ResourceFilter\Objects\FilteringRules; use Nvmcommunity\Alchemist\RestfulApi\ResourcePaginations\OffsetPaginator\Handlers\ResourceOffsetPaginator; use Nvmcommunity\Alchemist\RestfulApi\ResourceSearch\Handlers\ResourceSearch; use Nvmcommunity\Alchemist\RestfulApi\ResourceSort\Handlers\ResourceSort; class PostApiQuery extends AlchemistQueryable { /** * @param FieldSelector $fieldSelector * @return void */ public static function fieldSelector(FieldSelector $fieldSelector): void { $fieldSelector->defineFieldStructure([ '_id', 'title', 'body', 'slug' ])->defineDefaultFields(['_id']); } /** * @param ResourceFilter $resourceFilter * @return void */ public static function resourceFilter(ResourceFilter $resourceFilter): void { $resourceFilter->defineFilteringRules([ FilteringRules::String('_id', ['eq']), FilteringRules::String('title', ['eq', 'contains']), FilteringRules::String('body', ['eq', 'contains']), FilteringRules::String('slug', ['eq']), ]); } /** * @param ResourceOffsetPaginator $resourceOffsetPaginator * @return void */ public static function resourceOffsetPaginator(ResourceOffsetPaginator $resourceOffsetPaginator): void { $resourceOffsetPaginator->defineDefaultLimit(10) ->defineMaxLimit(1000); } /** * @param ResourceSearch $resourceSearch * @return void */ public static function resourceSearch(ResourceSearch $resourceSearch): void { $resourceSearch->defineSearchCondition('title'); } /** * @param ResourceSort $resourceSort * @return void * @throws AlchemistRestfulApiException */ public static function resourceSort(ResourceSort $resourceSort): void { $resourceSort->defineDefaultSort('_id') ->defineDefaultDirection('desc') ->defineSortableFields(['_id', 'title']); } }
步骤 2: 验证并响应用户请求
在执行查询并响应用户请求之前,请确保使用$laravelMongodbBuilder->validate()方法验证从请求输入传递的输入参数。
use App\Http\Controllers\ApiClass\User\PostApiQuery; use App\Models\Post; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Nvmcommunity\Alchemist\RestfulApi\Common\Exceptions\AlchemistRestfulApiException; use Nvmcommunity\LaravelMongodbApi\LaravelMongodbBuilder; class PostController extends Controller { /** * @param Request $request * @param JsonResponse $response * @return JsonResponse * @throws AlchemistRestfulApiException */ public function index(Request $request, JsonResponse $response): JsonResponse { $laravelMongodbBuilder = LaravelMongodbBuilder::for(Post::class, PostApiQuery::class, $request->input()); if (! $laravelMongodbBuilder->validate($e)->passes()) { return $response->setData($e->getErrors())->setStatusCode(400); } return $response->setData($laravelMongodbBuilder->getBuilder()->get()); } }
贡献者
代码贡献者
本项目因所有贡献者的贡献而存在。
许可证
本项目采用MIT许可证。