У меня есть несколько констант класса в моем классе сущности, например:
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
функции и constant
тесту .
Просто чтобы сэкономить ваше время. Если вам нужно получить доступ к константам класса в пространстве имен, используйте
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
Начиная с 1.12.1 вы также можете читать константы из экземпляров объекта:
{% if var == constant('TYPE_PERSON', 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('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 %}