Respostas:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Consulte a documentação para a constant
função e o constant
teste .
Apenas para economizar seu tempo. Se você precisar acessar constantes de classe no namespace, use
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
A partir da versão 1.12.1, você também pode ler constantes de instâncias de objetos:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, é possível fazer a seguir (instanciar a classe Entity)$this->render('index.html.twig', ['entity' => new Entity()]);
Edit: Encontrei uma solução melhor, leia aqui.
Digamos que você tenha aula:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Crie e registre a extensão 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
);
}
}
Agora você pode usar constantes no Twig como:
{{ MyClass.MY_CONSTANT }}
constant()
com FQN seria incômodo.
Se você estiver usando espaços para nome
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Importante! Use barras duplas, em vez de simples
Nas práticas recomendadas para livros do Symfony, há uma seção com este problema:
Constantes podem ser usadas, por exemplo, nos seus modelos Twig, graças à função constant ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
E use essa constante no modelo galho:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Aqui o link: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Depois de alguns anos, percebi que minha resposta anterior não é realmente tão boa. Eu criei uma extensão que resolve melhor o problema. É publicado como código aberto.
https://github.com/dpolac/twig-const
Ele define o novo operador Twig, #
que permite acessar a constante da classe através de qualquer objeto dessa classe.
Use-o assim:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, a NodeExpression
classe pode ser alterado para algo como isso, que trabalhou para mim: ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Obviamente, isso limita suas classes ao App\Entity
namespace, mas acho que isso abrange o caso de uso mais comum.
{% if var is constant('TYPE_PERSON', object) %}