Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function load($resource, $type = null)
 {
     $processor = new Processor();
     $configurationDefinition = new Configuration();
     $configuration = Yaml::parse($resource);
     $configuration = $processor->processConfiguration($configurationDefinition, ['routing' => $configuration]);
     if (!empty($configuration['only']) && !empty($configuration['except'])) {
         throw new \InvalidArgumentException('You can configure only one of "except" & "only" options.');
     }
     $routesToGenerate = ['show', 'index', 'create', 'update', 'delete'];
     if (!empty($configuration['only'])) {
         $routesToGenerate = $configuration['only'];
     }
     if (!empty($configuration['except'])) {
         $routesToGenerate = array_diff($routesToGenerate, $configuration['except']);
     }
     $isApi = $type === 'sylius.resource_api';
     /** @var MetadataInterface $metadata */
     $metadata = $this->resourceRegistry->get($configuration['alias']);
     $routes = $this->routeFactory->createRouteCollection();
     $rootPath = sprintf('/%s/', isset($configuration['path']) ? $configuration['path'] : Urlizer::urlize($metadata->getPluralName()));
     if (in_array('index', $routesToGenerate)) {
         $indexRoute = $this->createRoute($metadata, $configuration, $rootPath, 'index', ['GET'], $isApi);
         $routes->add($this->getRouteName($metadata, $configuration, 'index'), $indexRoute);
     }
     if (in_array('create', $routesToGenerate)) {
         $createRoute = $this->createRoute($metadata, $configuration, $isApi ? $rootPath : $rootPath . 'new', 'create', $isApi ? ['POST'] : ['GET', 'POST'], $isApi);
         $routes->add($this->getRouteName($metadata, $configuration, 'create'), $createRoute);
     }
     if (in_array('update', $routesToGenerate)) {
         $updateRoute = $this->createRoute($metadata, $configuration, $isApi ? $rootPath . '{id}' : $rootPath . '{id}/edit', 'update', $isApi ? ['PUT', 'PATCH'] : ['GET', 'PUT', 'PATCH'], $isApi);
         $routes->add($this->getRouteName($metadata, $configuration, 'update'), $updateRoute);
     }
     if (in_array('show', $routesToGenerate)) {
         $showRoute = $this->createRoute($metadata, $configuration, $rootPath . '{id}', 'show', ['GET'], $isApi);
         $routes->add($this->getRouteName($metadata, $configuration, 'show'), $showRoute);
     }
     if (in_array('delete', $routesToGenerate)) {
         $deleteRoute = $this->createRoute($metadata, $configuration, $rootPath . '{id}', 'delete', ['DELETE'], $isApi);
         $routes->add($this->getRouteName($metadata, $configuration, 'delete'), $deleteRoute);
     }
     return $routes;
 }
Exemplo n.º 2
0
    function it_generates_routing_with_custom_variables(RegistryInterface $resourceRegistry, MetadataInterface $metadata, RouteFactoryInterface $routeFactory, RouteCollection $routeCollection, Route $showRoute, Route $indexRoute, Route $createRoute, Route $updateRoute, Route $deleteRoute)
    {
        $resourceRegistry->get('sylius.product')->willReturn($metadata);
        $metadata->getApplicationName()->willReturn('sylius');
        $metadata->getName()->willReturn('product');
        $metadata->getPluralName()->willReturn('products');
        $metadata->getServiceId('controller')->willReturn('sylius.controller.product');
        $routeFactory->createRouteCollection()->willReturn($routeCollection);
        $configuration = <<<EOT
alias: sylius.product
vars:
    all:
        foo: bar
    create:
        bar: foo
    update:
        abc: xyz
EOT;
        $showDefaults = ['_controller' => 'sylius.controller.product:showAction', '_sylius' => ['vars' => ['foo' => 'bar']]];
        $routeFactory->createRoute('/products/{id}', $showDefaults, [], [], '', [], ['GET'])->willReturn($showRoute);
        $routeCollection->add('sylius_product_show', $showRoute)->shouldBeCalled();
        $indexDefaults = ['_controller' => 'sylius.controller.product:indexAction', '_sylius' => ['vars' => ['foo' => 'bar']]];
        $routeFactory->createRoute('/products/', $indexDefaults, [], [], '', [], ['GET'])->willReturn($indexRoute);
        $routeCollection->add('sylius_product_index', $indexRoute)->shouldBeCalled();
        $createDefaults = ['_controller' => 'sylius.controller.product:createAction', '_sylius' => ['vars' => ['foo' => 'bar', 'bar' => 'foo']]];
        $routeFactory->createRoute('/products/new', $createDefaults, [], [], '', [], ['GET', 'POST'])->willReturn($createRoute);
        $routeCollection->add('sylius_product_create', $createRoute)->shouldBeCalled();
        $updateDefaults = ['_controller' => 'sylius.controller.product:updateAction', '_sylius' => ['vars' => ['foo' => 'bar', 'abc' => 'xyz']]];
        $routeFactory->createRoute('/products/{id}/edit', $updateDefaults, [], [], '', [], ['GET', 'PUT', 'PATCH'])->willReturn($updateRoute);
        $routeCollection->add('sylius_product_update', $updateRoute)->shouldBeCalled();
        $deleteDefaults = ['_controller' => 'sylius.controller.product:deleteAction', '_sylius' => ['vars' => ['foo' => 'bar']]];
        $routeFactory->createRoute('/products/{id}', $deleteDefaults, [], [], '', [], ['DELETE'])->willReturn($deleteRoute);
        $routeCollection->add('sylius_product_delete', $deleteRoute)->shouldBeCalled();
        $this->load($configuration, 'sylius.resource')->shouldReturn($routeCollection);
    }
Exemplo n.º 3
0
    function it_generates_api_routing_based_on_resource_configuration(RegistryInterface $resourceRegistry, MetadataInterface $metadata, RouteFactoryInterface $routeFactory, RouteCollection $routeCollection, Route $showRoute, Route $indexRoute, Route $createRoute, Route $updateRoute, Route $deleteRoute)
    {
        $resourceRegistry->get('sylius.product')->willReturn($metadata);
        $metadata->getApplicationName()->willReturn('sylius');
        $metadata->getName()->willReturn('product');
        $metadata->getPluralName()->willReturn('products');
        $metadata->getServiceId('controller')->willReturn('sylius.controller.product');
        $routeFactory->createRouteCollection()->willReturn($routeCollection);
        $configuration = <<<EOT
alias: sylius.product
EOT;
        $showDefaults = ['_controller' => 'sylius.controller.product:showAction'];
        $routeFactory->createRoute('/products/{id}', $showDefaults, [], [], '', [], ['GET'])->willReturn($showRoute);
        $routeCollection->add('sylius_product_show', $showRoute)->shouldBeCalled();
        $indexDefaults = ['_controller' => 'sylius.controller.product:indexAction'];
        $routeFactory->createRoute('/products/', $indexDefaults, [], [], '', [], ['GET'])->willReturn($indexRoute);
        $routeCollection->add('sylius_product_index', $indexRoute)->shouldBeCalled();
        $createDefaults = ['_controller' => 'sylius.controller.product:createAction'];
        $routeFactory->createRoute('/products/', $createDefaults, [], [], '', [], ['POST'])->willReturn($createRoute);
        $routeCollection->add('sylius_product_create', $createRoute)->shouldBeCalled();
        $updateDefaults = ['_controller' => 'sylius.controller.product:updateAction'];
        $routeFactory->createRoute('/products/{id}', $updateDefaults, [], [], '', [], ['PUT', 'PATCH'])->willReturn($updateRoute);
        $routeCollection->add('sylius_product_update', $updateRoute)->shouldBeCalled();
        $deleteDefaults = ['_controller' => 'sylius.controller.product:deleteAction'];
        $routeFactory->createRoute('/products/{id}', $deleteDefaults, [], [], '', [], ['DELETE'])->willReturn($deleteRoute);
        $routeCollection->add('sylius_product_delete', $deleteRoute)->shouldBeCalled();
        $this->load($configuration, 'sylius.resource_api')->shouldReturn($routeCollection);
    }