更新 10-2021
请注意,此答案是为 symfony 3 和 twig 2 编写的。
如果您使用更新的版本,请参阅本文中@Garri Figueroa 的答案。
正如您在twig 文档\Twig_Extension
中看到的那样,该类\Twig_SimpleTest
现在已被弃用。
如果您使用更新版本的 symfony(我推荐它),请使用新的类AbstractExtension
,TwigFunction
等等
https://symfony.com/doc/5.3/templating/twig_extension.html
旧版本:symfony 3.4
这是使用 Extension 在 twig中执行instanceof运算符的好方法:
1)在你想要的地方创建你的扩展文件
(例如:src/OC/YourBundle/Twig/InstanceOfExtension.php)
使用 \Twig_Extension 你可以做很多事情,过滤器,功能,但现在我们将创建一个测试。
所以我们实现了函数 getTests(),并在其中创建了一个新的 \Twig_SimpleTest
第一个参数是您创建的测试的名称,第二个参数是可调用的。(可以是函数(){})。
<?php
namespace OC\YourBundle\Twig;
class InstanceOfExtension extends \Twig_Extension {
public function getTests() {
return array(
new \Twig_SimpleTest('instanceof', array($this, 'isInstanceOf')),
);
}
public function isInstanceOf($var, $instance) {
$reflexionClass = new \ReflectionClass($instance);
return $reflexionClass->isInstance($var);
}
}
2) 在 services.yml 中注册
(例如:src/OC/YourBundle/Resources/config/services.yml)
services:
[...may you have other services ...]
app.twig_extension:
class: OC\YourBundle\Twig\InstanceOfExtension
public: false
tags:
- { name: twig.extension }
3)然后像这样在树枝中使用它
{{ myvar is instanceof('\\OC\\YourBundle\\Entity\\YourEntityOrWhatEver') }}
来自 Adrien Brault => https://gist.github.com/adrienbrault/7045544