overblog/dataloader-bundle
最新稳定版本:v1.1.0
Composer 安装命令:
composer require overblog/dataloader-bundle
包简介
DataLoader Symfony bundle implementation.
README 文档
README
This bundle allows to easy use DataLoaderPHP in your Symfony project by configuring it through configuration.
Requirements
This library requires PHP >= 5.5 to work.
Installation
Download the Bundle
composer require overblog/dataloader-bundle
Enable the Bundle
class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new Overblog\DataLoaderBundle\OverblogDataLoaderBundle(), ]; // ... } // ... }
Getting Started
Here a fast example of how you can use the bundle
overblog_dataloader: defaults: # required promise_adapter: "overblog_dataloader.react_promise_adapter" # optional factory: ~ options: batch: true cache: true max_batch_size: ~ cache_map: "overblog_dataloader.cache_map" cache_key_fn: ~ loaders: users: alias: "users_dataloader" batch_load_fn: "@app.user:getUsers" posts: batch_load_fn: "Post::getPosts" options: max_batch_size: 15 batch: false cache: false cache_map: "app.cache.map" cache_key_fn: "@app.cache" images: factory: my_factory batch_load_fn: "Image\\Loader::get"
This example will create 3 loaders as services:
- "@overblog_dataloader.users_loader" with alias "@users_dataloader"
- "@overblog_dataloader.posts_loader"
- "@overblog_dataloader.images_loader" create using custom factory function "my_factory"
Here the list of existing promise adapters:
- ReactPhp/Promise: overblog_dataloader.react_promise_adapter
- GuzzleHttp/Promises: overblog_dataloader.guzzle_http_promise_adapter
- Webonyx/GraphQL-PHP Sync Promise: overblog_dataloader.webonyx_graphql_sync_promise_adapter
Configuration using attributes
This bundle supports autoconfiguration via attributes. Add Overblog\DataLoaderBundle\Attribute\AsDataLoader on the service you want to expose as data loader:
<?php #[Overblog\DataLoaderBundle\Attribute\AsDataLoader(name: "users", alias: "users_dataloader")] class UserLoader { public function __invoke(array $ids): array { return ["John", "Steve", "Nash"]; } } ?>
Combine with GraphQLBundle
This bundle can be use with GraphQLBundle. Here an example:
- Bundle config
#graphql overblog_graphql: definitions: schema: query: Query services: promise_adapter: "webonyx_graphql.sync_promise_adapter" #dataloader overblog_dataloader: defaults: promise_adapter: "overblog_dataloader.webonyx_graphql_sync_promise_adapter" loaders: ships: alias: "ships_loader" batch_load_fn: "@app.graph.ships_loader:all"
- Batch loader function
services: app.graph.ship_repository: class: AppBundle\Entity\Repository\ShipRepository factory: ["@doctrine.orm.entity_manager", getRepository] arguments: - AppBundle\Entity\Ship app.graph.ships_loader: class: AppBundle\GraphQL\Loader\ShipLoader arguments: - "@overblog_graphql.promise_adapter" - "@app.graph.ship_repository"
<?php namespace AppBundle\GraphQL\Loader; use AppBundle\Entity\Repository\ShipRepository; use GraphQL\Executor\Promise\PromiseAdapter; class ShipLoader { private $promiseAdapter; private $repository; public function __construct(PromiseAdapter $promiseAdapter, ShipRepository $repository) { $this->promiseAdapter = $promiseAdapter; $this->repository = $repository; } public function all(array $shipsIDs) { $qb = $this->repository->createQueryBuilder('s'); $qb->add('where', $qb->expr()->in('s.id', ':ids')); $qb->setParameter('ids', $shipsIDs); $ships = $qb->getQuery()->getResult(); return $this->promiseAdapter->all($ships); } }
- Usage in a resolver
public function resolveShip($shipID) { $promise = $this->container->get('ships_loader')->load($shipID); return $promise; }
This is an example using the sync promise adapter of Webonyx.
License
Overblog/DataLoaderBundle is released under the MIT license.
统计信息
- 总下载量: 2.28M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 47
- 点击次数: 1
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-02-04