Beispiel #1
0
 /**
  * @param object   $object
  * @param Relation $relation
  *
  * @return Link
  */
 public function createLink($object, Relation $relation)
 {
     $rel = $this->expressionEvaluator->evaluate($relation->getName(), $object);
     $href = $relation->getHref();
     if ($href instanceof Route) {
         if (!$this->urlGeneratorRegistry->hasGenerators()) {
             throw new \RuntimeException('You cannot use a route without an url generator.');
         }
         $name = $this->expressionEvaluator->evaluate($href->getName(), $object);
         $parameters = is_array($href->getParameters()) ? $this->expressionEvaluator->evaluateArray($href->getParameters(), $object) : $this->expressionEvaluator->evaluate($href->getParameters(), $object);
         if (!is_array($parameters)) {
             throw new \RuntimeException(sprintf('The route parameters should be an array, %s given. Maybe you forgot to wrap the expression in expr(...).', gettype($parameters)));
         }
         $href = $this->urlGeneratorRegistry->get($href->getGenerator())->generate($name, $parameters, $href->isAbsolute());
     } else {
         $href = $this->expressionEvaluator->evaluate($href, $object);
     }
     $attributes = $this->expressionEvaluator->evaluateArray($relation->getAttributes(), $object);
     return new Link($rel, $href, $attributes);
 }
 public function test()
 {
     $defaultUrlGenerator = $this->mockUrlGenerator();
     $registry = new UrlGeneratorRegistry($defaultUrlGenerator);
     $this->object($registry->get(UrlGeneratorRegistry::DEFAULT_URL_GENERATOR_KEY))->isEqualTo($defaultUrlGenerator)->object($registry->get())->isEqualTo($defaultUrlGenerator)->exception(function () use($registry) {
         $registry->get('foo');
     })->isInstanceOf('InvalidArgumentException')->hasMessage('The "foo" url generator is not set. Available url generators are: default.')->when($registry->set('foo', $fooUrlGenerator = $this->mockUrlGenerator()))->object($registry->get('foo'))->isEqualTo($fooUrlGenerator);
 }
 public function test()
 {
     $defaultUrlGenerator = $this->mockUrlGenerator();
     $registry = new UrlGeneratorRegistry($defaultUrlGenerator);
     $this->assertSame($defaultUrlGenerator, $registry->get(UrlGeneratorRegistry::DEFAULT_URL_GENERATOR_KEY));
     $this->assertSame($defaultUrlGenerator, $registry->get());
     $exception = null;
     try {
         $registry->get('foo');
     } catch (\Exception $e) {
         $exception = $e;
     }
     $this->assertInstanceOf('InvalidArgumentException', $exception);
     $this->assertSame('The "foo" url generator is not set. Available url generators are: default.', $exception->getMessage());
     $registry->set('foo', $fooUrlGenerator = $this->mockUrlGenerator());
     $this->assertSame($fooUrlGenerator, $registry->get('foo'));
 }
Beispiel #4
0
 /**
  * Add a new URL generator. If you pass `null` as name, it will be the
  * default URL generator.
  *
  * @param string|null           $name
  * @param UrlGeneratorInterface $urlGenerator
  *
  * @return HateoasBuilder
  */
 public function setUrlGenerator($name, UrlGeneratorInterface $urlGenerator)
 {
     $this->urlGeneratorRegistry->set($name, $urlGenerator);
     return $this;
 }