webignition/stubble

一个用于替换字符串中mustache-like变量的最小化库

0.16 2022-01-18 15:34 UTC

This package is auto-updated.

Last update: 2024-09-18 21:29:30 UTC


README

一个用于替换字符串中mustache-like变量的最小化库,使用PHP编写。

安装

composer require webignition/stubble

Hello {{ name }}! 示例

use webignition\Stubble\VariableResolver;
use webignition\StubbleResolvable\Resolvable;

// Using a VariableResolver instance
$resolver = new VariableResolver();

$resolvable = new Resolvable(
    'Hello {{ name }}!',
    [
        'name' => 'World',
    ]
);

$resolvedTemplate = $resolver->resolve($resolvable);
echo $resolvedTemplate; // Hello World!

未解析的变量

在解析模板后剩余的变量被视为未解析变量。模板中的未解析变量表示在上下文中缺少一个或多个值。这可能不是你想要的结果。

对于第一个未解析变量,会抛出 UnresolvedVariableException

use webignition\Stubble\UnresolvedVariableException;
use webignition\Stubble\VariableResolver;
use webignition\StubbleResolvable\Resolvable;

$resolver = new VariableResolver();

$resolvable = new Resolvable(
    'Hello {{ name }} and welcome to {{ location }}.',
    [
        'name' => 'World',
    ]
);

try {
    $resolvedTemplate = $resolver->resolve($resolvable);
} catch (UnresolvedVariableException $exception) {
    // Do something useful ... logging?
    $exception->getVariable(); // 'location'
    $exception->getTemplate(); // 'Hello {{ name }} and welcome to {{ location }}.'
}

选择性允许未解析变量

未解析变量决策器

你可能在已解析的模板中遇到未解析变量,例如,如果生成的内容本身是用于其他地方的模板。

使用 UnresolvedVariableFinder,解析器可以借助一个或多个未解析变量决策器,每个决策器都是一个返回布尔值的调用。第一个返回true的决策器允许未解析变量存在,而不会抛出异常。

use webignition\Stubble\UnresolvedVariableFinder;
use webignition\Stubble\VariableResolver;
use webignition\StubbleResolvable\Resolvable;

$resolver = new VariableResolver(
    new UnresolvedVariableFinder([
        function (string $variable) {
            return 'location' === $variable;
        },        
    ])
);

$resolvable = new Resolvable(
    'Hello {{ name }} and welcome to {{ location }}.',
    [
        'name' => 'World',
    ]
);

$resolvedTemplate = $resolver->resolve($resolvable);
echo $resolvedTemplate; // Hello Jon and welcome to {{ location }}.

使用 DeciderFactory 创建常用决策器

use webignition\Stubble\DeciderFactory;
use webignition\Stubble\VariableResolver;
use webignition\Stubble\UnresolvedVariableFinder;

$resolver = new VariableResolver(
    new UnresolvedVariableFinder([
        // Allow all unresolved variables
        DeciderFactory::createAllowAllDecider(),
        // Disallow all unresolved variables
        DeciderFactory::createDisallowAllDecider(),
        // Allow unresolved variables by pattern (regular expression),
        DeciderFactory::createAllowByPatternDecider('/^variable[0-9]$/')
    ])
);