Respuestas:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Consulte la documentación para la constant
función y la constant
prueba .
Solo para ahorrar tiempo. Si necesita acceder a las constantes de clase en el espacio de nombres, use
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
A partir de 1.12.1 también puede leer constantes de instancias de objetos:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, es posible hacer lo siguiente (instanciar clase de entidad)$this->render('index.html.twig', ['entity' => new Entity()]);
Editar: he encontrado una mejor solución, lea sobre esto aquí.
Digamos que tienes clase:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Crear y registrar la extensión 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
);
}
}
Ahora puedes usar constantes en Twig como:
{{ MyClass.MY_CONSTANT }}
constant()
con FQN sería molesto.
Si está utilizando espacios de nombres
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
¡Importante! Use barras dobles, en lugar de simples
En las mejores prácticas del libro de Symfony hay una sección con este problema:
Las constantes se pueden usar, por ejemplo, en sus plantillas Twig gracias a la función constant ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Y use esta constante en la plantilla de ramita:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Aquí el enlace: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Después de algunos años, me di cuenta de que mi respuesta anterior no es realmente tan buena. He creado una extensión que resuelve mejor el problema. Se publica como código abierto.
https://github.com/dpolac/twig-const
Define un nuevo operador Twig #
que le permite acceder a la constante de clase a través de cualquier objeto de esa clase.
Úselo así:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, la NodeExpression
clase podría ser cambiado a algo como esto, que trabajó para mí: ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Por supuesto, esto limita sus clases al App\Entity
espacio de nombres, pero creo que cubre el caso de uso más común.
{% if var is constant('TYPE_PERSON', object) %}