このレシピに基づいて、カスタム DatabaseTwigLoader を作成しました: http://twig.sensiolabs.org/doc/recipes.html#using-a-database-to-store-templates
それは正常に動作します。このローダーを使用して、DB から電子メール テンプレートを読み込み、それらをレンダリングし、迅速なメーラーを使用して送信しています。
問題は、テンプレートをレンダリングするときに、パスまたは url 小枝関数を使用できないことです。返されるエラーは次のとおりです。
関数「パス」が 6 行目の「NEW_POST_ON_YOUR_GOAL」に存在しません (500 内部サーバー エラー)
ただし、変数の補間とフィルターが適用され、テンプレートの継承が機能します。
URL / パス関数をカスタム ローダーに登録する必要がありますか? これらの機能がルーティングに依存していることと関係がありますか?
前もって感謝します。
** @MolecularMan によって提案されたソリューションの実装 **
ルーティング拡張機能を twigEnvironment に追加する必要がありました。これは TwigEnvironment::addExtension() メソッドを使用して行いました。
DI を使用してこれを実現するには、urlGenerator クラスを拡張する必要がありました (コンストラクター引数として routing_extension サービスに渡されます)。
UrlGenerator は、routeCollection オブジェクトをコンストラクター引数として受け取ります。そこで、routecollection を抽出して parent::__contruct() に渡すことができるように、ルーター サービスをコンストラクター引数として拡張 urlGenerator に渡します。
DI を使用してこれを実現するには、urlGenerator クラスを拡張する必要がありました (コンストラクター引数として routing_extension サービスに渡されます)。
UrlGenerator は、routeCollection オブジェクトをコンストラクター引数として受け取ります。そこで、routecollection を抽出して parent::__contruct() に渡すことができるように、ルーター サービスをコンストラクター引数として拡張 urlGenerator に渡します。
私の services.yml ファイルは次のようになります。
twig_db:
class: %twig.class%
arguments: [@twig_db_loader]
calls: [[ addExtension, [@routing_extension] ]]
url_generator:
class: ZT\UserBundle\Services\UrlGenerator
arguments: [@router, @request_context, @logger]
request_context:
class: Symfony\Component\Routing\RequestContext
routing_extension:
class: Symfony\Bridge\Twig\Extension\RoutingExtension
arguments: [@url_generator]
twig_db_loader:
class: ZT\UserBundle\Services\DatabaseTwigLoader
arguments: [@doctrine.orm.entity_manager]