[php] Twig에서 클래스 상수에 액세스하는 방법?

엔티티 클래스에는 몇 가지 클래스 상수가 있습니다.

class Entity {
    const TYPE_PERSON = 0;
    const TYPE_COMPANY = 1;
}

일반적인 PHP에서는 자주 사용 if($var == Entity::TYPE_PERSON)하며 Twig에서 이런 종류의 작업을하고 싶습니다. 가능합니까?



답변

{% 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') }}


답변

1.12.1부터 객체 인스턴스에서도 상수를 읽을 수 있습니다.

{% if var == constant('TYPE_PERSON', 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('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 %}