Ответы:
{% 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('Namespace\\Classname::CONSTANT_NAME') }}
( док )
{{ constant('TYPE_PERSON', entity) }}
, можно сделать следующее (создать экземпляр класса 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 будет утомительным.
Если вы используете пространства имен
{{ 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
Через несколько лет я понял, что мой предыдущий ответ на самом деле не так хорош. Я создал расширение, которое лучше решает проблему. Он опубликован как открытый исходный код.
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) %}