Odpowiedzi:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Zobacz dokumentację dotyczącą constant
funkcji i constant
testu .
Żeby zaoszczędzić czas. Jeśli potrzebujesz uzyskać dostęp do stałych klas w przestrzeni nazw, użyj
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
Od wersji 1.12.1 można również odczytywać stałe z instancji obiektów:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
jest to możliwe do zrobienia następujące (instancję klasy Entity)$this->render('index.html.twig', ['entity' => new Entity()]);
Edycja: znalazłem lepsze rozwiązanie, przeczytaj o tym tutaj.
Powiedzmy, że masz klasę:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Utwórz i zarejestruj rozszerzenie 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
);
}
}
Teraz możesz używać stałych w Twig, takich jak:
{{ MyClass.MY_CONSTANT }}
constant()
z FQN byłoby uciążliwe.
Jeśli używasz przestrzeni nazw
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Ważny! Użyj podwójnych ukośników zamiast pojedynczych
W książce o najlepszych praktykach Symfony znajduje się sekcja z tym problemem:
Stałe mogą być używane na przykład w twoich szablonach Twig dzięki funkcji constant ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
I użyj tej stałej w gałązce szablonu:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Tutaj link: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Po kilku latach zdałem sobie sprawę, że moja poprzednia odpowiedź nie jest zbyt dobra. Stworzyłem rozszerzenie, które lepiej rozwiązuje problem. Jest opublikowany jako open source.
https://github.com/dpolac/twig-const
Definiuje nowy operator Twig, #
który umożliwia dostęp do stałej klasy poprzez dowolny obiekt tej klasy.
Użyj tego w ten sposób:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
The NodeExpression
klasa może zostać zmieniona na czymś takim, który pracował dla mnie ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Oczywiście ogranicza to twoje klasy do App\Entity
przestrzeni nazw, ale myślę, że obejmuje to najbardziej powszechny przypadek użycia.
{% if var is constant('TYPE_PERSON', object) %}