将 4 位字符串中的第三个字符替换为 Twig 中的另一个字符

问题描述 投票:0回答:3

我的目标是从 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 存在。

我怎样才能实现我想要实现的目标?

非常感谢。

symfony twig
3个回答
1
投票

创建您自己的 Twig 扩展 - 过滤器: SymfonyCookbook 恕我直言,这将是最干净的方法。


1
投票

slice
是一个过滤器而不是函数,您可以尝试通过管道传输它们,但在您的情况下,如果不创建自定义的
twig
函数或过滤器来满足您的需求
mask
,我看不到可以实现的东西:


0
投票

这是一个老问题,但我一直在寻找一个树枝过滤器来隐藏 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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.