webignition / stubble
一个用于替换字符串中mustache-like变量的最小化库
0.16
2022-01-18 15:34 UTC
Requires
- php: ^8.0|^8.1
- webignition/stubble-resolvable: >=0.24,<1
Requires (Dev)
- phpstan/phpstan: ^1.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
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]$/') ]) );