zef-dev/zef-expression-language

类似于JUEL的Symfony Expression Language扩展

1.3.2 2023-11-25 21:56 UTC

README

一个简单的扩展,扩展了Symfony Expression Language,使其具有更多JUEL类似的行为。

  • 它不会在不存在值时崩溃 - 它将评估为null
  • 它允许您使用JUEL风格的数组值访问和对象方法(点表示法)

安装

# With composer
$ composer require zef-dev/zef-expression-language

使用

只需将Symfony的ExpressionLanguage替换为Zef版本。

use Zef\Zel\Symfony\ExpressionLanguage;

$expressionLanguage =   new ExpressionLanguage();
$evaluated          =   $expressionLanguage->evaluate( 'true', []);

// will not throw an exception any more
$evaluated          =   $expressionLanguage->evaluate( 'myvar', []);
$evaluated          =   $expressionLanguage->evaluate( 'myvar[\'myfield\']', ['myvar'=>[]]);

类似JUEL的使用

为了获得类似JUEL的评估功能,将您的值数组包装在ArrayResolver中。

use Zef\Zel\Symfony\ExpressionLanguage;
use Zef\Zel\ArrayResolver;

$expressionLanguage =   new ExpressionLanguage();
$resolver           =   new ArrayResolver([]);
$evaluated          =   $expressionLanguage->evaluate( 'true', $resolver->getValues());

// now you can access array fields in dot notation
$resolver           =   new ArrayResolver(['myvar'=>['myfield'=>true]]);
$evaluated          =   $expressionLanguage->evaluate( 'myvar.myfield', $resolver->getValues());

// now you can access getters in a shorter way
$obj    =   new Myclass();
$obj->getName();
$obj->isValid();
$obj->hasErrror();

$resolver           =   new ArrayResolver(['myvar'=>$obj]);
$evaluated          =   $expressionLanguage->evaluate( 'myvar.name', $resolver->getValues());
$evaluated          =   $expressionLanguage->evaluate( 'myvar.valid', $resolver->getValues());
$evaluated          =   $expressionLanguage->evaluate( 'myvar.error', $resolver->getValues());

        

关于实现的说明

我们希望扩展Symfony类并仅覆盖必要的部分,但由于原始类不是以允许轻松扩展的方式编写的,我们最终不得不完全复制粘贴一些类,以便能够实现一些小的修改。

此包基于PHP Boilerplate创建