Yanıtlar:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
constant
İşlev ve constant
test için belgelere bakın .
Sadece zamandan tasarruf etmek için. Ad alanı altındaki sınıf sabitlerine erişmeniz gerekiyorsa, şunu kullanın:
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
1.12.1'den itibaren sabitleri nesne örneklerinden de okuyabilirsiniz:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( doc ) yazın
{{ constant('TYPE_PERSON', entity) }}
, şunu yapmak mümkündür (Varlık sınıfını somutlaştırmak)$this->render('index.html.twig', ['entity' => new Entity()]);
Düzenleme: Daha iyi bir çözüm buldum, buradan okuyun.
Diyelim ki dersiniz var:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
Twig uzantısı oluşturun ve kaydedin:
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
);
}
}
Şimdi Twig'de sabitleri şu şekilde kullanabilirsiniz:
{{ MyClass.MY_CONSTANT }}
constant()
, FQN ile kullanmak can sıkıcı olabilir.
Ad alanları kullanıyorsanız
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
Önemli! Tek yerine çift eğik çizgi kullanın
Symfony'nin en iyi uygulamaları kitabında bu konuyla ilgili bir bölüm var:
Sabitler, sabit () işlevi sayesinde örneğin Twig şablonlarınızda kullanılabilir:
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
Ve bu sabiti şablon dalında kullanın:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
İşte bağlantı: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
Birkaç yıl sonra, önceki cevabımın pek de iyi olmadığını anladım. Sorunu daha iyi çözen uzantı oluşturdum. Açık kaynak olarak yayınlanmıştır.
https://github.com/dpolac/twig-const
Bu #
sınıfın herhangi bir nesnesi aracılığıyla sınıf sabitine erişmenizi sağlayan yeni Twig operatörünü tanımlar .
Bunu şu şekilde kullanın:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, NodeExpression
sınıf benim için çalıştı Böyle bir şey, şeklinde değiştirilebilir: ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
. Elbette bu, sınıflarınızı App\Entity
ad alanıyla sınırlar , ancak bunun en yaygın kullanım durumunu kapsadığını düşünüyorum.
{% if var is constant('TYPE_PERSON', object) %}