giadc / doctrine-json-api
A package for handling JSON API requests with Doctrine
Installs: 5 211
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: >=8.2
- doctrine/orm: ^2.14
- giadc/json-api-request: ^3.0.4
- giadc/json-api-response: ^4.0.0
- symfony/cache: ^7.0
Requires (Dev)
- doctrine/data-fixtures: ^1.4
- mockery/mockery: ^1.3
- phpstan/phpstan: ^1.5
- phpstan/phpstan-doctrine: ^1.2
- phpstan/phpstan-mockery: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.0
- symfony/yaml: ^5.0
README
A package for automating pagination, filtering, sorting, and includes when working with Doctrine and the JSON API standard.
Installation
composer install giadc/doctrine-json-api
Basic Usage
Using the Read Service
$entityReadService->findById('id123', $includes = []); $entityReadService->findByArray(['id123', 'id456'], 'id', $includes = []); $entityReadService->findByField('name', 'Chiquita'); $entityReadService->paginate($includes = []);
<?php namespace App\Bananas\Services; use App\Common\Services\AbstractReadService; use App\Bananas\Repositories\BananaRepositoryInterface as BananaRepo; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class RoleReadService extends AbstractReadService { public function __construct( BananaRepo $bananaRepo ) { $this->initialize($bananaRepo, 'Banana'); }
Filters Skeleton
<?php namespace App\Bananas\Filters; use Giadc\DoctrineJsonApi\Filters\FilterManager; /** * Class BananaFilters */ class BananaFilter extends FilterManager { /** * @var array */ protected $accepted = [ 'id' => ['type' => 'id'], // id must match exactly 'name' => ['type' => 'keyword'], // keyword will match fuzzily ]; }
Repository Skeleton
<?php namespace App\Bananas\Repositories; use App\Bananas\Banana; use App\Bananas\Filters\BananaFilter; use App\Bananas\Repositories\BananaRepositoryInterface; use Doctrine\ORM\EntityManagerInterface as EntityManager; use Giadc\DoctrineJsonApi\Interfaces\AbstractJsonApiRepositoryInterface as JsonApiInterface; use Giadc\DoctrineJsonApi\Repositories\AbstractJsonApiDoctrineRepository as JsonApiRepository; class RoleDoctrineRepository extends JsonApiRepository implements JsonApiInterface, RoleRepositoryInterface { /** @var EntityManager */ protected $em; /** @var string */ protected $class; /** @var BananaFilter **/ protected $filters; /** * Create a new BananaDoctrineRepository * * @param EntityManager $em * @param BananaFilters $filters * @return void */ public function __construct(EntityManager $em, BananaFilter $filters) { $this->em = $em; $this->class = Role::class; $this->filters = $filters; } }