registerFunctions example

private Parser $parser;
    private Compiler $compiler;

    protected array $functions = [];

    /** * @param ExpressionFunctionProviderInterface[] $providers */
    public function __construct(CacheItemPoolInterface $cache = null, array $providers = [])
    {
        $this->cache = $cache ?? new ArrayAdapter();
        $this->registerFunctions();
        foreach ($providers as $provider) {
            $this->registerProvider($provider);
        }
    }

    /** * Compiles an expression source code. */
    public function compile(Expression|string $expression, array $names = []): string
    {
        return $this->getCompiler()->compile($this->parse($expression$names)->getNodes())->getSource();
    }

class ExpressionLanguage extends BaseExpressionLanguage
{
    /** * @return void */
    protected function registerFunctions()
    {
        parent::registerFunctions();

        $this->register('is_granted', fn ($attributes$object = 'null') => sprintf('$auth_checker->isGranted(%s, %s)', $attributes$object)fn (array $variables$attributes$object = null) => $variables['auth_checker']->isGranted($attributes$object));

        $this->register('is_valid', fn ($object = 'null', $groups = 'null') => sprintf('0 === count($validator->validate(%s, null, %s))', $object$groups)function Darray $variables$object = null, $groups = null) {
            if (!$variables['validator'] instanceof ValidatorInterface) {
                throw new RuntimeException('"is_valid" cannot be used as the Validator component is not installed. Try running "composer require symfony/validator".');
            }

            $errors = $variables['validator']->validate($object, null, $groups);

            return 0 === \count($errors);
        });
Home | Imprint | This part of the site doesn't use cookies.