例如,如果我们将一个表对象传递给twig视图,我们如何才能获得该对象的类名,如表'表'。
class Table{
}
$table = new Table();
在Twig:
{{ table.className }}
--->这应该显示'表'
答案 0 :(得分:28)
如果您不想在实体上创建这样的方法,请执行以下操作:
public function getClassName()
{
return (new \ReflectionClass($this))->getShortName();
}
然后你可以创建一个Twig函数或过滤器。这是一个功能:
class ClassTwigExtension extends \Twig_Extension
{
public function getFunctions()
{
return array(
'class' => new \Twig_SimpleFunction('class', array($this, 'getClass'))
);
}
public function getName()
{
return 'class_twig_extension';
}
public function getClass($object)
{
return (new \ReflectionClass($object))->getShortName();
}
}
像这样使用:
{{ class(table) }}
答案 1 :(得分:6)
在\ Twig_Extension中,您可以添加测试
public function getTests()
{
return [
'instanceof' => new \Twig_Function_Method($this, 'isInstanceof')
];
}
/**
* @param $var
* @param $instance
* @return bool
*/
public function isInstanceof($var, $instance) {
return $var instanceof $instance;
}
然后使用
{% if value is instanceof('DateTime') %}
答案 2 :(得分:1)
nurikabe答案的稍微更新的版本:
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class ClassTwigExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('get_class', 'get_class'),
];
}
public function getName()
{
return 'class_twig_extension';
}
}
使用方式如下:
{{ get_class(table) }}