146

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

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

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

4

7 回答 7

242

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

{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
于 2012-10-20T16:27:22.403 回答
205
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}

请参阅constant函数constant测试的文档。

于 2011-09-30T13:50:54.553 回答
29

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

{% if var == constant('TYPE_PERSON', entity)
于 2014-03-26T15:25:14.333 回答
13

如果您使用命名空间

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

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

于 2014-04-21T13:48:23.873 回答
12

编辑:我找到了更好的解决方案,请在此处阅读。



假设你有课:

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 }}
于 2014-09-23T20:10:15.763 回答
9

在 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

于 2014-12-03T09:27:11.030 回答
4

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

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

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

像这样使用它:

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

于 2016-05-28T12:58:55.817 回答