【问题标题】:how can we get class name of the entity object in twig view我们如何在树枝视图中获取实体对象的类名
【发布时间】:2014-03-21 04:46:09
【问题描述】:

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

class Table{

}

$table = new Table();

在树枝中:

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

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    如果您不想像这样在实体上将此方法设为:

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

    【讨论】:

    • 您的第一个报价效果很好,而且比我想象的要简单。
    • 注意getShortName只返回没有命名空间的类名。使用 getName 函数获取类的 FQN(即命名空间和名称)。
    • 我刚刚向我的实体添加了一个 getClass 方法,该方法返回短名称,如此处所示。但要在模板中使用它,我只需调用 entity.class 即可获得类的简称。
    【解决方案2】:

    在 \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;
    }
    

    然后用like

    {% if value is instanceof('DateTime') %}
    

    【讨论】:

    • 这不能回答问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多