Réponses:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Voir la documentation pour la constant
fonction et le constant
test .
Juste pour gagner du temps. Si vous avez besoin d'accéder aux constantes de classe sous l'espace de noms, utilisez
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
Depuis la version 1.12.1, vous pouvez également lire les constantes des instances d'objet:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, il est possible de faire ce qui suit (instancier la classe Entity)$this->render('index.html.twig', ['entity' => new Entity()]);
Edit: j'ai trouvé une meilleure solution, lisez-la ici.
Disons que vous avez la classe:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Créez et enregistrez l'extension 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
);
}
}
Vous pouvez maintenant utiliser des constantes dans Twig comme:
{{ MyClass.MY_CONSTANT }}
constant()
avec FQN serait gênant.
Si vous utilisez des espaces de noms
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Important! Utilisez des doubles barres obliques au lieu de simples
Dans les bonnes pratiques de Symfony, il y a une section avec ce problème:
Les constantes peuvent être utilisées par exemple dans vos templates Twig grâce à la fonction constant ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Et utilisez cette constante dans le template twig:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Voici le lien: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Après quelques années, j'ai réalisé que ma réponse précédente n'était pas vraiment très bonne. J'ai créé une extension qui résout mieux le problème. Il est publié en open source.
https://github.com/dpolac/twig-const
Il définit un nouvel opérateur Twig #
qui vous permet d'accéder à la constante de classe via n'importe quel objet de cette classe.
Utilisez-le comme ça:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, la NodeExpression
classe pourrait être changé pour quelque chose comme ça, ce qui a fonctionné pour moi: ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Bien sûr, cela limite vos classes à l' App\Entity
espace de noms, mais je pense que cela couvre le cas d'utilisation le plus courant.
{% if var is constant('TYPE_PERSON', object) %}