如何访问Twig中的类常量?

我在实体类中有几个类常量,例如:

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

在正常的PHP我经常做if($var == Entity::TYPE_PERSON) ,我想在Twig中做这种东西。 可能吗?

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

请参阅constant函数和constanttesting的文档。

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

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

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

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

编辑:我find了更好的解决scheme, 在这里阅读。


  • 详细了解如何在Twig文档中创build和注册扩展。
  • 阅读Symfony2文档中的Twig扩展。

假设你有课:

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

创build并注册枝条扩展:

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

如果您正在使用名称空间

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

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

在Symfony的最佳实践中,有一个关于这个问题的部分:

常量可以在你的Twig模板中使用,这要归功于constant()函数:

 // 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

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

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

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

像这样使用它:

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