146

エンティティクラスにいくつかのクラス定数があります。例:

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

通常のPHPでは、私はよくやっif($var == Entity::TYPE_PERSON)ていますが、Twigでこの種のことをしたいと思っています。出来ますか?

4

7 に答える 7

242

時間を節約するためだけに。名前空間の下のクラス定数にアクセスする必要がある場合は、

{{ constant('Acme\\DemoBundle\\Entity\\Demo::MY_CONSTANT') }}
于 2012-10-20T16:27:22.403 に答える
205
{% if var == constant('Namespace\\Entity::TYPE_PERSON') %}
{# or #}
{% if var is constant('Namespace\\Entity::TYPE_PERSON') %}

constant関数constantテストのドキュメントを参照してください。

于 2011-09-30T13:50:54.553 に答える
29

1.12.1以降、オブジェクトインスタンスから定数を読み取ることもできます。

{% if var == constant('TYPE_PERSON', entity)
于 2014-03-26T15:25:14.333 に答える
13

名前空間を使用している場合

{{ constant('Namespace\\Entity::TYPE_COMPANY') }}

重要!シングルの代わりにダブルスラッシュを使用する

于 2014-04-21T13:48:23.873 に答える
12

編集:私はより良い解決策を見つけました、それについてここで読んでください。



クラスがあるとしましょう:

namespace MyNamespace;
class MyClass
{
    const MY_CONSTANT = 'my_constant';
    const MY_CONSTANT2 = 'const2';
}

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
        );
    }
}

これで、Twigで次のような定数を使用できます。

{{ MyClass.MY_CONSTANT }}
于 2014-09-23T20:10:15.763 に答える
9

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

于 2014-12-03T09:27:11.030 に答える
4

数年後、以前の答えはあまり良くないことに気づきました。問題をよりよく解決する拡張機能を作成しました。オープンソースとして公開されています。

https://github.com/dpolac/twig-const

#これは、そのクラスの任意のオブジェクトを介してクラス定数にアクセスできるようにする新しいTwig演算子を定義します。

次のように使用します。

{% if entity.type == entity#TYPE_PERSON %}

于 2016-05-28T12:58:55.817 に答える