如何在树枝视图中获取实体对象的类名

时间:2014-03-21 04:46:09

标签: symfony twig

例如,如果我们将一个表对象传递给twig视图,我们如何才能获得该对象的类名,如表'表'。

class Table{

}

$table = new Table();

在Twig:

{{ table.className }} --->这应该显示'表'

3 个答案:

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