/** * @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')); }
/** * 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; }