em = $em; } /** * @return ExpressionFunction[] An array of Function instances. */ public function getFunctions() { /** * Dummy compiler. * We use this expression function only in runtime and not compile its. */ $compiler = function () { }; $functions = []; /** @var ClassMetadataInfo[] $metadataList */ $metadataList = $this->em->getMetadataFactory()->getAllMetadata(); foreach ($metadataList as $metadata) { $name = $metadata->getName(); $shortName = substr($name, strrpos($name, '\\') + 1); $fnName = 'get'. $shortName; if (strpos($name, 'Entity\\'. $shortName) === false) { // Process only entities inside 'Entity' directory. continue; } /** * @param mixed $arguments Arguments specified by expression language * @param array $criteria Search criteria. * * @return null|object Found entity or null. */ $evaluator = function ($arguments, array $criteria) use ($name) { return $this->em->getRepository($name)->findOneBy($criteria); }; $functions[] = new ExpressionFunction($fnName, $compiler, $evaluator); } return $functions; } }