如何访问Twig中的类常量?

时间:2011-09-30 13:28:56

标签: php templates twig

我的实体类中有一些类常量,例如:

class Entity {
    const TYPE_PERSON = 0;
    const TYPE_COMPANY = 1;
}

在普通的PHP中,我经常if($var == Entity::TYPE_PERSON),我想在Twig中做这种事情。有可能吗?

7 个答案:

答案 0 :(得分:226)

只是为了节省您的时间。如果需要访问命名空间下的类常量,请使用

{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}

答案 1 :(得分:169)

{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}

请参阅constant functionconstant test的文档。

答案 2 :(得分:24)

从1.12.1开始,您也可以从对象实例中读取常量:

{% if var == constant('TYPE_PERSON', entity)

答案 3 :(得分:10)

如果您使用名称空间

{{ constant('Namespace\\Entity::TYPE_COMPANY') }}

重要!使用双斜杠,而不是单个

答案 4 :(得分:10)

编辑:我找到了更好的解决方案,read about it here.



假设你上课了:

namespace MyNamespace;
class MyClass
{
    const MY_CONSTANT = 'my_constant';
    const MY_CONSTANT2 = 'const2';
}

创建并注册Twig扩展名:

class MyClassExtension extends \Twig_Extension
{
    public function getName()
    { 
        return 'my_class_extension'; 
    }

    public function getGlobals()
    {
        $class = new \ReflectionClass('MyNamespace\MyClass');
        $constants = $class->getConstants();

        return array(
            'MyClass' => $constants
        );
    }
}

现在你可以在Twig中使用常量,如:

{{ MyClass.MY_CONSTANT }}

答案 5 :(得分:8)

在Symfony的书籍最佳实践中,有一个部分涉及此问题:

  

由于使用了constant()函数,常量可以在Twig模板中使用:

// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;

class Post
{
    const NUM_ITEMS = 10;

   // ...
}

在模板树枝中使用此常量:

<p>
    Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>

这里的链接: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options

答案 6 :(得分:4)

几年后,我意识到我之前的答案并不是那么好。我创建了扩展,可以更好地解决问题。它是作为开源发布的。

https://github.com/dpolac/twig-const

它定义了新的Twig运算符#,它允许您通过该类的任何对象访问类常量。

使用它:

{% if entity.type == entity#TYPE_PERSON %}