/** * @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 ApiResource $resource * @return string */ public static function getFilterName(ApiResource $resource) { return $resource->getBundlePrefix() . '_' . $resource->getName(); }
/** * Get the name of a route action * * @param ApiResource $parentResource * @return string */ public function getRouteName(ApiResource $parentResource = null) { $parentResourceName = $parentResource ? '.' . $parentResource->getName() : ''; return $this->apiResource->getBundlePrefix() . $parentResourceName . '.' . $this->apiResource->getName() . '.' . $this->action; }
/** * @param ApiResource $resource * @param Route $route * @return string */ private function getDescription(ApiResource $resource, Route $route) { $description = ''; $name = $resource->getName(); $action = $resource->getActions()->getActionForRoute($route); switch (get_class($action)) { case Index::class: $description = 'List all ' . Inflector::pluralize($name); break; case Show::class: $description = 'Get a single ' . Inflector::singularize($name); break; case Create::class: $description = 'Create a new ' . Inflector::singularize($name); break; case Update::class: $description = 'Update a ' . Inflector::singularize($name); break; case BatchUpdate::class: $description = 'Update multiple ' . Inflector::pluralize($name); break; case Delete::class: $description = 'Delete a ' . Inflector::singularize($name); break; case BatchDelete::class: $description = 'Delete multiple ' . Inflector::pluralize($name); break; default: @trigger_error('Action was not defined'); break; } return $description; }
/** @test */ public function it_returns_the_resource_name() { $this->assertEquals('posts', $this->config->getName()); }