ApiPlatform\Core\Bridge\Symfony\Routing\RouteNameResolver::getRouteName PHP Method

getRouteName() public method

public getRouteName ( string $resourceClass, boolean $collection ) : string
$resourceClass string
$collection boolean
return string
    public function getRouteName(string $resourceClass, bool $collection) : string
    {
        $operationType = $collection ? 'collection' : 'item';
        foreach ($this->router->getRouteCollection()->all() as $routeName => $route) {
            $currentResourceClass = $route->getDefault('_api_resource_class');
            $operation = $route->getDefault(sprintf('_api_%s_operation_name', $operationType));
            $methods = $route->getMethods();
            if ($resourceClass === $currentResourceClass && null !== $operation && (empty($methods) || in_array('GET', $methods))) {
                return $routeName;
            }
        }
        throw new InvalidArgumentException(sprintf('No %s route associated with the type "%s".', $operationType, $resourceClass));
    }

Usage Example

Exemplo n.º 1
0
 public function testGetRouteNameForCollectionRoute()
 {
     $routeCollection = new RouteCollection();
     $routeCollection->add('some_item_route', new Route('/some/item/path/{id}', ['_api_resource_class' => 'AppBundle\\Entity\\User', '_api_item_operation_name' => 'some_item_op']));
     $routeCollection->add('some_collection_route', new Route('/some/collection/path', ['_api_resource_class' => 'AppBundle\\Entity\\User', '_api_collection_operation_name' => 'some_collection_op']));
     $routerProphecy = $this->prophesize(RouterInterface::class);
     $routerProphecy->getRouteCollection()->willReturn($routeCollection);
     $routeNameResolver = new RouteNameResolver($routerProphecy->reveal());
     $actual = $routeNameResolver->getRouteName('AppBundle\\Entity\\User', true);
     $this->assertSame('some_collection_route', $actual);
 }