Jawaban:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
Lihat dokumentasi untuk constant
fungsi dan constant
tes .
Hanya untuk menghemat waktu Anda. Jika Anda perlu mengakses konstanta kelas di bawah namespace, gunakan
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
Pada 1.12.1 Anda dapat membaca konstanta dari instance objek juga:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc )
{{ constant('TYPE_PERSON', entity) }}
, dimungkinkan untuk mengikuti (instantiate Entity class)$this->render('index.html.twig', ['entity' => new Entity()]);
Sunting: Saya telah menemukan solusi yang lebih baik, baca di sini.
Katakanlah Anda memiliki kelas:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Buat dan daftarkan ekstensi 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
);
}
}
Sekarang Anda dapat menggunakan konstanta di Twig seperti:
{{ MyClass.MY_CONSTANT }}
constant()
FQN akan menyusahkan.
Jika Anda menggunakan ruang nama
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Penting! Gunakan garis miring ganda, bukan tunggal
Dalam buku praktik terbaik Symfony ada bagian dengan masalah ini:
Konstanta dapat digunakan misalnya di templat Twig Anda berkat fungsi konstan ():
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Dan gunakan konstanta ini dalam ranting templat:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
Berikut tautannya: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Setelah beberapa tahun saya menyadari bahwa jawaban saya sebelumnya tidak begitu baik. Saya telah membuat ekstensi yang memecahkan masalah dengan lebih baik. Ini diterbitkan sebagai sumber terbuka.
https://github.com/dpolac/twig-const
Ini mendefinisikan operator ranting baru #
yang memungkinkan Anda mengakses konstanta kelas melalui objek apa pun dari kelas itu.
Gunakan seperti itu:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, yang NodeExpression
kelas bisa berubah menjadi sesuatu seperti ini, yang bekerja untuk saya: ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Tentu saja, ini membatasi kelas Anda ke App\Entity
namespace, tapi saya pikir itu mencakup kasus penggunaan yang paling umum.
{% if var is constant('TYPE_PERSON', object) %}