public function testCompile() { $object = new \StdClass(); $linkHelperMock = $this->mockHelper('/foo', $object, 'self', false); $expressionLanguage = new ExpressionLanguage(); $expressionEvaluator = new ExpressionEvaluator($expressionLanguage); $expressionEvaluator->registerFunction(new LinkExpressionFunction($linkHelperMock)); $compiledExpression = $expressionLanguage->compile('link(object, "self", false)', array('object', 'link_helper')); // setup variables for expression eval $object = $object; $link_helper = $linkHelperMock; $this->assertEquals('/foo', eval(sprintf('return %s;', $compiledExpression))); }
/** * Build a configured Hateoas instance. * * @return Hateoas */ public function build() { $metadataFactory = $this->buildMetadataFactory(); $relationProvider = new RelationProvider($metadataFactory, $this->chainResolver); $relationsRepository = new RelationsRepository($metadataFactory, $relationProvider); $expressionEvaluator = new ExpressionEvaluator($this->getExpressionLanguage(), $this->contextVariables); $linkFactory = new LinkFactory($expressionEvaluator, $this->urlGeneratorRegistry); $exclusionManager = new ExclusionManager($expressionEvaluator); $linksFactory = new LinksFactory($relationsRepository, $linkFactory, $exclusionManager); $embeddedsFactory = new EmbeddedsFactory($relationsRepository, $expressionEvaluator, $exclusionManager); $linkHelper = new LinkHelper($linkFactory, $relationsRepository); // Register Hateoas core functions $expressionEvaluator->registerFunction(new LinkExpressionFunction($linkHelper)); // Register user functions foreach ($this->expressionFunctions as $expressionFunction) { $expressionEvaluator->registerFunction($expressionFunction); } if (null === $this->xmlSerializer) { $this->setDefaultXmlSerializer(); } if (null === $this->jsonSerializer) { $this->setDefaultJsonSerializer(); } $inlineDeferrers = array(); $eventSubscribers = array(new XmlEventSubscriber($this->xmlSerializer, $linksFactory, $embeddedsFactory), new JsonEventSubscriber($this->jsonSerializer, $linksFactory, $embeddedsFactory, $inlineDeferrers[] = new InlineDeferrer(), $inlineDeferrers[] = new InlineDeferrer())); $this->serializerBuilder->addDefaultListeners()->configureListeners(function (EventDispatcherInterface $dispatcher) use($eventSubscribers) { foreach ($eventSubscribers as $eventSubscriber) { $dispatcher->addSubscriber($eventSubscriber); } }); $jmsSerializer = $this->serializerBuilder->build(); foreach (array_merge($inlineDeferrers, array($this->jsonSerializer, $this->xmlSerializer)) as $serializer) { if ($serializer instanceof JMSSerializerMetadataAwareInterface) { $serializer->setMetadataFactory($jmsSerializer->getMetadataFactory()); } } return new Hateoas($jmsSerializer, $linkHelper); }
public function testRegisterFunction() { $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage()); $expressionEvaluator->registerFunction(new HelloExpressionFunction()); $this->string($expressionEvaluator->evaluate('expr(hello("toto"))', null))->isEqualTo('Hello, toto!'); }
public function testRegisterFunction() { $expressionEvaluator = new ExpressionEvaluator(new ExpressionLanguage()); $expressionEvaluator->registerFunction(new HelloExpressionFunction()); $this->assertSame('Hello, toto!', $expressionEvaluator->evaluate('expr(hello("toto"))', null)); }