zef-dev / zef-expression-language
类似于JUEL的Symfony Expression Language扩展
1.3.2
2023-11-25 21:56 UTC
Requires
- php: ^7.2.5
- psr/cache: ^1.0.1
- symfony/expression-language: ^5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-25 23:44:19 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创建