/** * @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 * @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 * @dataProvider routes * * @param $routeType * @param $expectedUrl * @param $expectedControllerAction */ public function it_returns_the_controller_action_names($routeType, $expectedUrl, $expectedControllerAction) { $this->assertEquals($expectedControllerAction, $this->config->getActions()->get($routeType)->getControllerAction()); }