从twig变量中删除文件扩展名

时间:2017-08-25 14:52:37

标签: php twig

我正在使用Twig,在我的模板中,这仅适用于.mp4扩展名

{{ video | trim('.mp4', 'right') }}

但有些文件还有其他扩展名,如.avi和.mkv 如何修剪{{video}}变量中的最后4个字符?

5 个答案:

答案 0 :(得分:4)

您可以为此目的编写自己的过滤器:

// Define a filter using an anonymous function
$filter = new Twig_SimpleFilter('remove_extension', function ($string) {

    // Return file name without extension
    return pathinfo($string, PATHINFO_FILENAME);
});

// Add it to twig instance, assuming it is stored in $twig
$twig->addFilter($filter);

现在,您可以在模板文件中使用remove_extension过滤器:

{{ video | remove_extension() }}

您可以在此处阅读有关wrigint自定义Twig过滤器的更多信息https://twig.symfony.com/doc/2.x/advanced.html#filters

答案 1 :(得分:2)

删除扩展程序的最佳方法是:

{{ video | split('.')|slice(0,-1)|join }}

此解决方案:

{{ video | split('.')[0] }} 

只有在文件名是一个点符号时才能工作,但是当文件名中有多个点时......这个解决方案不起作用。

OR

您可以在twig中编写自定义过滤器并使用basename方法:

class TwigExtension extends \Twig_Extension
{

    public function getName()
    {
       return 'twig_extension';
    }

    public function getFilters()
    {
       return [
           new \Twig_SimpleFilter('basename', [$this, 'basenameFilter'])
       ];
    }

    public function basenameFilter($value, $suffix = '')
    {
       return basename($value, $suffix);
    }
}

并使用此过滤器:

{{ video | basename }}

您可以阅读here

答案 2 :(得分:0)

您可以使用split

{{ video | split('.')[0] }} 

仅当字符串中包含一个.时才会有效。

修改

由于某些字符串中会包含多个.。我建议使用slice函数:

{{ video|slice(0, (video|length - 4)) }}

但我建议在将服务器传递给twig之前在服务器上执行此类逻辑。

答案 3 :(得分:0)

您可以尝试使用replace,而不是替换任何字符。

{{ video | replace({'.mp4': ""})}}

答案 4 :(得分:0)

你可以试试这个:

{{ video | replace({('.' ~ video | split('.')[video | split('.')|length - 1]): ""})}}

fiddle