我的目标是从 4 位数字字符串中屏蔽一位数字。我不想拥有
2451
,而是想要 24*1
。
我尝试了
{{ my_var|replace(slice(2, 1): '*') }}
,但这会引发以下错误:The function "slice" does not exist in My:Bundle:file.html.twig
。
最奇怪的是
{{ my_var|slice(2, 1) }}
工作完美。所以函数 does 存在。
我怎样才能实现我想要实现的目标?
非常感谢。
创建您自己的 Twig 扩展 - 过滤器: SymfonyCookbook 恕我直言,这将是最干净的方法。
slice
是一个过滤器而不是函数,您可以尝试通过管道传输它们,但在您的情况下,如果不创建自定义的twig
函数或过滤器来满足您的需求mask
,我看不到可以实现的东西:
这是一个老问题,但我一直在寻找一个树枝过滤器来隐藏 x 个图表,最后我编写了以下树枝扩展。
<?php
declare(strict_types=1);
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends AbstractExtension
{
public function getFilters(): array
{
return [
new TwigFilter('mask', [$this, 'mask']),
];
}
/**
* Find & Replace characters in a string for masking & hiding.
*/
public function mask(string $string, $position = 0, int $charactersToMask = 4, $replacement = '*')
{
// Find & Replace ${charactersToMask} charts after first ${position} letter with ${replacement} in a string
if (\strlen($string) >= ($charactersToMask + $position)) {
return substr_replace($string, str_repeat($replacement, $charactersToMask), $position, $charactersToMask);
}
return $string;
}
}