如何获取twig视图中实体对象的类名

问题描述 投票:0回答:4

举个例子,如果我们将一个表对象传递给twig视图,我们如何获得该对象的类名,例如“Table”。

class Table{

}

$table = new Table();

在树枝中:

{{ table.className }}
---> 这应该显示“表格”

symfony twig
4个回答
39
投票

如果您不想将其作为实体上的方法,如下所示:

public function getClassName()
{
    return (new \ReflectionClass($this))->getShortName();
}

然后你可以创建一个 Twig 函数或过滤器。这是一个函数:

class ClassTwigExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return array(
            'class' => new \Twig_SimpleFunction('class', [$this, 'getClass'])
        );
    }

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

    public function getClass($object)
    {
        return (new \ReflectionClass($object))->getShortName();
    }
}

像这样使用:

{{ class(table) }}

9
投票

在 \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') %}

5
投票

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) }}

0
投票

如果您启用了

\Twig\Extension\DebugExtension
扩展,则可以使用dump功能:

{{ dump(table) }}

并目视检查转储输出中的对象类。

© www.soinside.com 2019 - 2024. All rights reserved.