Answers:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
有关constant
功能和constant
测试,请参见文档。
只是为了节省您的时间。如果需要访问命名空间下的类常量,请使用
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
从1.12.1开始,您还可以从对象实例读取常量:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('TYPE_PERSON', entity) }}
,则可以执行以下操作(实例化实体类)$this->render('index.html.twig', ['entity' => new Entity()]);
编辑:我找到了更好的解决方案,请在此处阅读。
假设您有课:
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 }}
constant()
,因此与FQN一起使用会很麻烦。
在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
几年后,我意识到我以前的回答并不是那么好。我创建了扩展程序,可以更好地解决问题。它以开源形式发布。
https://github.com/dpolac/twig-const
它定义了新的Twig运算符#
,该运算符使您可以通过该类的任何对象访问该类常量。
像这样使用它:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
,在NodeExpression
类可能被更改为这样的事情,这为我工作:->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
。当然,这将您的类限制为App\Entity
名称空间,但是我认为这涵盖了最常见的用例。
{% if var is constant('TYPE_PERSON', object) %}