gpt4 book ai didi

symfony - 有没有办法在调用 Twig 过滤器之前检查它是否存在?

转载 作者:行者123 更新时间:2023-12-02 16:18:25 27 4
gpt4 key购买 nike

有没有办法在调用之前检查 Twig 过滤器是否存在?

似乎在使用过滤器之前定义什么条件并不重要,我总是得到相同的错误:

'Unknown "myFilter" filter.'

{% if not true %}
{{ 'Hello World'|myFilter }}
{% endif %}

最佳答案

当您尝试使用未定义的过滤器时,您总是会遇到 Twig_Error_Syntax 异常,即使您在问题中那样无法访问的地方执行此操作。对于函数来说也是如此,请参阅 Check if a custom Twig function exists and then call it .

您可以创建自定义函数来检查过滤器是否存在。但你仍然不能编写这样的代码:

{% if filter_exists('myFilter') %}
{{ 'Hello World'|myFilter }}
{% endif %}

相反,您还需要创建另一个函数,这样您就可以得到如下所示的函数:

{% if filter_exists('myFilter') %}
{{ call_filter('Hello World', 'myFilter') }}
{% endif %}

这样,如果过滤器不存在,您就不会收到异常。

创建这些方法相当简单:

$twig->addFunction(new Twig_Function('filter_exists', function(Twig_Environment $env, $filter) {
return $env->getFilter($filter) !== false;
}, ['needs_environment' => true]));

$twig->addFunction(new Twig_Function('call_filter', function(Twig_Environment $env, $input, $filter, ...$args) {
return $env->getFilter($filter)->getCallable()($input, ...$args);
}, ['needs_environment' => true]));

或者根据您的需要,您也可以将两者结合起来,以便在过滤器不存在时按原样返回输入:

$twig->addFunction(new Twig_Function('call_filter_if_it_exists', function(Twig_Environment $env, $input, $filter, ...$args) {
$filter = $env->getFilter($filter);

if ($filter === false) {
return $input;
}

return $filter->getCallable()($input, ...$args);
}, ['needs_environment' => true]));

然后在 Twig 中:

{{ call_filter_if_it_exists('Hello World', 'myFilter', 'first arg', 'second arg') }}

关于symfony - 有没有办法在调用 Twig 过滤器之前检查它是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com