답변:
{% 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') }}
( doc )
{{ 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
);
}
}
이제 다음과 같이 Twig에서 상수를 사용할 수 있습니다.
{{ MyClass.MY_CONSTANT }}
constant()
FQN과 함께 사용 하면 번거로울 수 있습니다.
네임 스페이스를 사용하는 경우
{{ constant('Namespace\\Entity::TYPE_COMPANY') }}
중대한! 단일 대신 이중 슬래시를 사용하십시오.
Symfony의 모범 사례에이 문제에 대한 섹션이 있습니다.
constant () 함수 덕분에 Twig 템플릿에서 상수를 사용할 수 있습니다.
// 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) %}