uuf6429 / expression-language-tplstring
Symfony Expression Language 的模板字符串支持
2.0.0
2022-12-24 04:56 UTC
Requires
- php: ^7 || ^8
- symfony/expression-language: ^3 || ^4 || ^5 || ^6
Requires (Dev)
- phpunit/phpunit: ^6 || ^7 || ^8 || ^9
README
🪡 模板字符串
针对 Symfony Expression Language (4-6)
看起来像点、十字和波浪,却做同样的事情是什么?
当然,它是连接运算符!
PHP 使用点(.),许多语言包括 JavaScript 使用加号(+),而 Symfony Expression Language 使用波浪号(~)。
此库在表达式语言之上提供了一层转换层,将 ES6 格式的模板字符串转换为有效的表达式。虽然提供了一个更新的表达式语言子类以方便使用,但您不必使用它,可以使用提供的特质。
* 仅支持 ES6 字符串插值(带有任何表达式和嵌套);例如,带标签的模板不支持。
🔌 安装
和以往一样,推荐且最简单的方法是使用 Composer 安装此库
composer require "uuf6429/expression-language-tplstring"
🚀 使用方法
如果您不打算扩展 Symfony Expression Language 类,可以使用提供的直接替换库
$el = new \uuf6429\ExpressionLanguage\ExpressionLanguageWithTplStr(); $el->evaluate('`hello ${name}!`', ['name'=>'mars']); // => hello mars!
否则,您可以子类化所需的 Expression Language 类并使用提供的特质
class MyEL extends \uuf6429\ExpressionLanguage\ExpressionLanguageWithArrowFunc { use \uuf6429\ExpressionLanguage\TemplateStringTranslatorTrait; public function compile($expression, array $names = []) { if (!$expression instanceof \Symfony\Component\ExpressionLanguage\ParsedExpression) { $expression = $this->translateTplToEl($expression); } return parent::compile($expression, $names); } public function evaluate($expression, array $values = []) { if (!$expression instanceof \Symfony\Component\ExpressionLanguage\ParsedExpression) { $expression = $this->translateTplToEl($expression); } return parent::evaluate($expression, $values); } } $el = new MyEL(); $el->evaluate( 'users.map((user) -> { `hello ${user.name}!` }).join(` `)', [ 'users' => new \Illuminate\Support\Collection([ (object)['name' => 'John', 'surname' => 'Doe'], (object)['name' => 'Jane', 'surname' => 'Roe'], ]) ] ); // => hello John! hello Jane!