Ich habe einige Klassenkonstanten in meiner Entitätsklasse, z.
class Entity {
const TYPE_PERSON = 0;
const TYPE_COMPANY = 1;
}
In normalen PHP Ich mache oft if($var == Entity::TYPE_PERSON)
und ich möchte solche Sachen in Twig machen. Ist es möglich?
Nur um Zeit zu sparen. Wenn Sie unter Namespace auf Klassenkonstanten zugreifen müssen, verwenden Sie
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
Ab 1.12.1 können Sie auch Konstanten aus Objektinstanzen lesen:
{% if var == constant('TYPE_PERSON', entity)
Wenn Sie Namespaces verwenden
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Wichtig! Verwenden Sie doppelte Schrägstriche anstelle von einfachen
Edit: Ich habe eine bessere Lösung gefunden, Lies es hier nach.
Nehmen wir an, Sie haben Unterricht:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Erstellen und registrieren Sie Twig Erweiterung:
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 }}
In den Buch-Best Practices von Symfony finden Sie einen Abschnitt zu diesem Problem:
Konstanten können zum Beispiel in Ihren Twig Vorlagen dank der constant () Funktion verwendet werden:
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Und benutze 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 den neuen Twig operator #
, mit dem Sie über ein beliebiges Objekt dieser Klasse auf die Klassenkonstante zugreifen können.
Benutze es so:
{% if entity.type == entity#TYPE_PERSON %}