Відповіді:
{% 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') }}
( doc )
{{ 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 було б нудно.
Якщо ви використовуєте простори імен
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Важливо! Використовуйте подвійні нахили, а не одинарні
У книзі кращих практик Symfony є розділ з цим питанням:
Константи можна використовувати, наприклад, у ваших шаблонах 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) %}