/** * @param EntityManager $em * @param ApiResource $apiResource * @param FormHandler $formHandler * @param FilterInterface $filter */ function __construct(EntityManager $em, ApiResource $apiResource, FormHandler $formHandler, FilterInterface $filter = null) { $repository = $em->getRepository($apiResource->getEntityClass()); $this->repository = $this->getRepository($repository); $this->formHandler = $formHandler; $this->filter = $filter; }
/** * @param ApiResource $apiResource * @param RouteCollection $routes * @param ApiResource $parentResource */ private function addRoute(ApiResource $apiResource, RouteCollection $routes, $parentResource = null) { foreach ($apiResource->getActions() as $action) { if (!$parentResource && !$apiResource->isMainResource()) { continue; } $route = new Route($this->getUrl($action, $parentResource)); $route->setDefault('_api_resource', $apiResource->getName())->setDefault('_controller', $action->getControllerAction())->setDefault('_entity', $apiResource->getEntityClass())->setDefault('_security', $this->expressionsToSecurity($action->getSecurityExpression()))->setDefault('_identifier', $apiResource->getIdentifier())->setMethods($action->getMethods()); if ($action instanceof Index) { $route->setDefault('_indexGetterMethod', $action->getResourceGetterMethod()); $route->setDefault('_limit', $action->getDefaultLimit()); } $routes->add($action->getRouteName($parentResource), $route); } foreach ($apiResource->getSubResources() as $subResource) { $this->addRoute($subResource, $routes, $apiResource); } }
/** * @param FilterBuilder $builder * @param $entity * @param EntityManager $em * @param ApiResource $parentResource * @param string $prefix */ protected function addFilterForParent(FilterBuilder $builder, $entity, EntityManager $em, ApiResource $parentResource, $prefix = '') { $meta = $em->getClassMetadata($entity); $mappings = $this->getAssociationMappings($meta, $parentResource->getEntityClass()); $builder->add(self::getFilterName($parentResource), EqualFilterType::class, ['fields' => $this->getFields($prefix, $mappings)]); if ($parentsParent = $parentResource->getParentResource()) { $this->addFilterForParent($builder, $parentResource->getEntityClass(), $em, $parentsParent, $parentResource->getAssocSubResource() . '.'); } }
/** * @param ApiDoc $annotation * @param ApiResource $resource */ private function setOutput(ApiDoc $annotation, ApiResource $resource) { $refl = new \ReflectionClass($annotation); $prop = $refl->getProperty('output'); $prop->setAccessible(true); $prop->setValue($annotation, $resource->getEntityClass()); $prop->setAccessible(false); }
/** @test */ public function it_returns_the_entity_namespace() { $this->assertEquals(Post::class, $this->config->getEntityClass()); }