7

base.html.twigsymfony のデフォルトの場所app/Resources/views/からカスタムの場所に移動された単純なテンプレート ファイルをロードしようとしましたtheme/

テンプレート ファイルには次のものが含まれます。

    <!DOCTYPE html>
    <html>
     <head>
     ...
     </head>
     <body>
      {% block body %}{% endblock %}
     </body>
    </html>

Acme\Core\CoreBundle\Controllerコントローラ固有のテンプレートを使用して、コントローラによって上記のテンプレート ファイルを拡張する

    {% extends '::base.html.twig' %}
    {% block body %}
      Hello world!
    {% endblock %}

と言うエラーにつながりますUnable to find template "::base.html.twig" in "AcmeCoreCoreBundle:Default:index.html.twig".

グローバル空間でテンプレートファイルを見つける場所を symfony に伝えるにはどうすればよいですか?

前もって感謝します。

4

5 に答える 5

6

Adam のヒントにより、私は自分で質問に答えることができます。ですから、誰かが興味を持っている場合は、私の答えを提供したいと思います。

は、簡単に使用できるAcmeDemoBundletwig 拡張 (クラス) を提供します。Acme\DemoBundle\Twig\Extension\DemoExtensionコンストラクタを次のように変更します

    public function __construct(FilesystemLoader $loader)
    {
     $this->loader = $loader;
     $this->loader->addPath('path/to/your/directory');
    }

ここで symfony に twig エクステンションを登録するよう伝えます。config.ymlファイルを編集して(例: app/config/config.yml)、追加します

    services:
     demo.twig.extension
      class: Acme\DemoBundle\Twig\Extension\DemoExtension
      tags:
       - { name: twig.extension }
      arguments:
       - @Twig.loader

最後になりましたが、拡張小枝ファイルを変更::し、デフォルト テンプレートの名前空間から を削除します: {% extends 'base.html.twig' %}.

于 2012-10-19T09:47:08.027 に答える
5

これに対する別の解決策を見つけることができました。これは実装がはるかに高速です。最初にこの質問に対して受け入れられた回答を試しましたが、まだパスの問題がありました。

render がテンプレートを呼び出す直前に、次のように twig.loader コンテナーへのパスを追加しました。

$this->container->get('twig.loader')->addPath('../../../../theme/', $namespace = '__main__');

これで、ルート フォルダーの「theme」というディレクトリから twig テンプレートがレンダリングされます。私は Fabien Pontencier 自身 (Symfony と Twig の作成者) からのこの解決策を、こちらの twig バグへの返信で見つけました: https://github.com/symfony/symfony/issues/1912

于 2013-08-19T14:34:45.430 に答える
2

アクションから、(サービス) コンテナーから 'twig.loader' サービスを取得できます。

$this->get('twig.loader')->addPath('path/to/your/directory');

そして、テンプレートでこのパスを使用できます。

@besta は twig 拡張機能を使用してそれを行い、twig ローダーをコンストラクターに挿入しました。しかし、twig 拡張機能では、環境を使用できます。

class YourTwigExtension extends \Twig_Extension {
...
   public function initRuntime(\Twig_Environment $environment) {
      $this->environment = $environment;
      $this->environment->getLoader()->addPath(__DIR__ . '/Resources/views');
   }
...
}
于 2012-12-30T10:25:41.467 に答える