1

現在のプロジェクトで実装する必要があるものを考えています。以下に例を挙げて説明します。

多くのテンプレートで使用される以下の変数構造を使用します。

{% if article.tags is iterable %}
    {% for tag in article.tags %}
        {{ tag.title }}
    {% endfor %}
{% endif %}

上記の #1 行でわかるように、一般的な使用法で、PHP からの「タグ」データのリストを持つ「記事」変数データを Twig テンプレート ローダーに割り当てます。しかし、データベースから「タグ」データをロードしてテンプレートに割り当てたくありません。「タグ」データが使用されているかどうかにかかわらず、サーバー接続とリソースを使用すると思うからです。

したがって、最良のアプローチは、Twig 内に実装されたイベント リスナー (フック) の概念を使用することだと思います。以下はそのプロセスです。

1) テンプレートをロードする前に、PHP ファイルのどこかにリスナーを準備しています: $this->twig->addListenerMethod($this, 'tags');

2) Twig が "tags" 変数を解析するとき、同じメソッド名が変数にアタッチされているリスナーがあるかどうかをチェックします。

3) リスナーが見つかると、Twig は親オブジェクト (記事) を最初のパラメーターとして渡すことによって指定されたメソッドを呼び出します。

4) メソッドが呼び出されると、必要に応じて処理し、必要な「タグ」データ リストを返します。

私の質問は次のとおりです。

1) Twig でイベント リスナー (フック) の概念を調べて実装できる Twig ソース ファイルはどれですか?

2) 上記で説明したように、Twig を使用して同じ実装を既に行っている人はいますか?

3) または誰か提案がありますか?

Twigのソースも掘り下げている間に、これについて多くの提案ができたらいいのにと思います。

ありがとう。

敬具。

4

1 に答える 1

1

私は自分の質問の解決策を見つけました:

テンプレートに「 Article」オブジェクトを割り当てるだけです。

$template->render(array(
  'article' => new Article()
);

以下は、オブジェクト " Article " がどのように見えるかです:

class Article
{
  public function tags($args)
  {
    return array(
      array(
        'title' => 'oke',
        'desc' => 'lorem ipsum'
      ),
      array(
        'title' => 'oke 1',
        'desc' => 'lorem ipsum 1'
      )
    );
  }
}

メソッド「 tags 」に引数を渡したい場合は、以下の例を使用してください。

{% if article.tags('param_1', 'param_n') is iterable %}
  {% for tag in article.tags('param_1', 'param_n') %}
    {{ tag.title }}
  {% endfor %}
{% endif %}
于 2012-07-04T03:30:20.430 に答える