我正在使用Twig,在我的模板中,这仅适用于.mp4扩展名
{{ video | trim('.mp4', 'right') }}
但有些文件还有其他扩展名,如.avi和.mkv 如何修剪{{video}}变量中的最后4个字符?
答案 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]): ""})}}