जवाबों:
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}
constant
फ़ंक्शन और constant
परीक्षण के लिए दस्तावेज़ देखें ।
बस अपना समय बचाने के लिए। यदि आपको नामस्थान के तहत कक्षा के स्थिरांक तक पहुंचने की आवश्यकता है, तो उपयोग करें
{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
{% if var == object.MY_CONSTANT %}
1.12.1 के अनुसार आप ऑब्जेक्ट इंस्टेंस से स्थिरांक भी पढ़ सकते हैं:
{% if var == constant('TYPE_PERSON', entity)
{{ constant('Namespace\\Classname::CONSTANT_NAME') }}
( डॉक्टर )
{{ constant('TYPE_PERSON', entity) }}
, तो यह निम्न करना संभव है (तात्कालिक एंटिटी वर्ग)$this->render('index.html.twig', ['entity' => new Entity()]);
संपादित करें: मुझे बेहतर समाधान मिला है, इसके बारे में यहां पढ़ें।
मान लीजिए कि आपके पास कक्षा है:
namespace MyNamespace;
class MyClass
{
const MY_CONSTANT = 'my_constant';
const MY_CONSTANT2 = 'const2';
}
ट्विग एक्सटेंशन बनाएं और पंजीकृत करें:
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
);
}
}
अब आप ट्विग में स्थिरांक का उपयोग कर सकते हैं जैसे:
{{ MyClass.MY_CONSTANT }}
constant()
FQN के साथ उपयोग करना कष्टप्रद होगा।
यदि आप नाम स्थान का उपयोग कर रहे हैं
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
जरूरी! सिंगल की जगह डबल स्लैश का इस्तेमाल करें
सिम्फनी की पुस्तक सर्वोत्तम प्रथाओं में इस मुद्दे के साथ एक खंड है:
स्थिरांक () फ़ंक्शन के लिए आपके ट्विग टेम्पलेट में उदाहरण के लिए स्थिरांक का उपयोग किया जा सकता है:
// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;
class Post
{
const NUM_ITEMS = 10;
// ...
}
और टेम्प्लेट टहनी में इस स्थिरांक का उपयोग करें:
<p>
Displaying the {{ constant('NUM_ITEMS', post) }} most recent results.
</p>
यहाँ लिंक: http://symfony.com/doc/current/best_practices/configuration.html#constants-vs-configuration-options
कुछ वर्षों के बाद मुझे महसूस हुआ कि मेरा पिछला उत्तर वास्तव में इतना अच्छा नहीं है। मैंने विस्तार किया है जो समस्या को बेहतर तरीके से हल करता है। इसे ओपन सोर्स के रूप में प्रकाशित किया गया है।
https://github.com/dpolac/twig-const
यह नए Twig ऑपरेटर को परिभाषित करता है #
जो आपको उस वर्ग के किसी भी ऑब्जेक्ट के माध्यम से कक्षा को लगातार एक्सेस करने देता है।
इसे इस तरह उपयोग करें:
{% if entity.type == entity#TYPE_PERSON %}
User#TYPE_PERSON
, यदि आप ऑब्जेक्ट को इंस्टेंट किए बिना इकाई वर्ग के नाम का उपयोग करना चाहते हैं , तो NodeExpression
कक्षा को कुछ इस तरह बदला जा सकता है, जो मेरे लिए काम की है ->raw('(constant(\'App\\Entity\\' . $this->getNode('left')->getAttribute('name') . '::' . $this->getNode('right')->getAttribute('name') . '\'))')
:। बेशक, यह आपकी कक्षाओं को App\Entity
नामस्थान तक सीमित करता है, लेकिन मुझे लगता है कि यह सबसे आम उपयोग के मामले को कवर करता है।
{% if var is constant('TYPE_PERSON', object) %}