3

小枝テンプレートでいくつかのエンティティ定数をチェックするコードがあります:

{% if logRecord.status is constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_MONEY_RESERVED') %}

しかし、毎回こんなに長いクラス名を使うのはとても恥ずかしいです。小枝で名前空間エイリアスを作成する方法はありますか? 何かのようなもの:

{% use App\\DealBundle\\Entity\\Deal %}
{% if logRecord.status is constant('Deal::DEAL_STATE_MONEY_RESERVED') %}

または、常に完全なクラス名を記述する必要がありますか?

4

3 に答える 3

4

私は同じ問題に直面しましたが、解決策は非常に簡単であることがわかりました。レンダリングだけでなく値 (int、string、float など) としても定数値を使用するため、このマクロはこのケースでは機能しません。このマクロを使用すると、Twig は値を Twig_Markup クラスに変換するため、これは不可能です。

というわけで、解決策は次回です。テンプレートのどこかで次のように宣言します。

    {% set namespace = 'App\\DealBundle\\Entity\\' %}

次に、別の場所で次のように使用できます。

    {% if logRecord.status is constant(namespace~'Deal::DEAL_STATE_MONEY_RESERVED') %}
于 2013-11-08T08:25:32.060 に答える
1

マクロを使用できます:

{% macro state(name) -%}
   {{ constant('App\\DealBundle\\Entity\\Deal::DEAL_STATE_' ~ name) }}
{%- endmacro %}

そして、このように使用します:

{% if logRecord.status == _self.state('MONEY_RESERVED') %}

ハイフン ( - ) を使用して、マクロ内の空白を削除することを忘れないでください。

于 2013-04-20T13:56:08.397 に答える