uuf6429/expression-language-tplstring

Symfony Expression Language 的模板字符串支持

2.0.0 2022-12-24 04:56 UTC

This package is auto-updated.

Last update: 2024-09-24 08:55:00 UTC


README

🪡 模板字符串

针对 Symfony Expression Language (4-6)

CI codecov Minimum PHP Version License Latest Stable Version Latest Unstable Version

看起来像点、十字和波浪,却做同样的事情是什么?

当然,它是连接运算符!

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!