Antworten:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Siehe Dokumentation zur constant
Funktion und zum constant
Test .
Nur um Zeit zu sparen. Wenn Sie unter dem Namespace auf Klassenkonstanten zugreifen müssen, verwenden Sie
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
Ab 1.12.1 können Sie auch Konstanten aus Objektinstanzen lesen:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, können Sie Folgendes tun ( $this->render('index.html.twig', ['entity' => new Entity()]);
Bearbeiten: Ich habe eine bessere Lösung gefunden, lesen Sie hier darüber.
Angenommen, Sie haben Klasse:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Twig-Erweiterung erstellen und registrieren:
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
);
}
}
Jetzt können Sie Konstanten in Twig wie folgt verwenden:
{{ MyClass.MY_CONSTANT }}
constant()
mit FQN lästig wäre.
Wenn Sie Namespaces verwenden
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Wichtig! Verwenden Sie doppelte Schrägstriche anstelle von einfachen
In den Best Practices für Symfony-Bücher gibt es einen Abschnitt mit diesem Problem:
Konstanten können zum Beispiel in Ihren Twig-Vorlagen dank der Funktion constant () verwendet werden:
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Und verwenden Sie diese Konstante in Template Twig:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Hier der Link: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Nach einigen Jahren wurde mir klar, dass meine vorherige Antwort nicht wirklich so gut ist. Ich habe eine Erweiterung erstellt, die das Problem besser löst. Es ist als Open Source veröffentlicht.
https://github.com/dpolac/twig-const
Es definiert einen neuen Twig-Operator, mit #
dem Sie über ein beliebiges Objekt dieser Klasse auf die Klassenkonstante zugreifen können.
Verwenden Sie es so:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
kann die NodeExpression
Klasse in eine solche geändert werden, die für mich funktioniert hat : ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Dies beschränkt Ihre Klassen natürlich auf den App\Entity
Namespace, aber ich denke, das deckt den häufigsten Anwendungsfall ab.
{% if var is constant('TYPE_PERSON', object) %}