我写了一个自定义的 DatabaseTwigLoader,基于这个配方:http ://twig.sensiolabs.org/doc/recipes.html#using-a-database-to-store-templates
它工作正常。我正在使用这个加载器从数据库加载电子邮件模板,渲染它们并使用 swift mailer 发送它们。
问题是,在渲染模板时,我不能使用路径或 url 树枝函数。返回的错误是:
第 6 行的“NEW_POST_ON_YOUR_GOAL”中不存在函数“路径”(500 内部服务器错误)
然而,变量插值和过滤器被应用并且模板继承工作。
我需要用自定义加载器注册 url / path 函数吗?这些功能依赖于路由是否与此有关?
提前致谢。
** @MolecularMan 建议的解决方案的实施**
我必须将路由扩展添加到 twigEnvironment。我使用 TwigEnvironment::addExtension() 方法做到了这一点。
为了使用 DI 实现这一点,我必须扩展 urlGenerator 类(作为构造函数参数传递给 routing_extension 服务)。
UrlGenerator 将 routeCollection 对象作为构造函数参数。所以我将路由器服务作为构造函数参数传递给我的扩展 urlGenerator,以便我可以提取 routecollection 并将其传递给 parent::__contruct()
为了使用 DI 实现这一点,我必须扩展 urlGenerator 类(作为构造函数参数传递给 routing_extension 服务)。
UrlGenerator 将 routeCollection 对象作为构造函数参数。所以我将路由器服务作为构造函数参数传递给我的扩展 urlGenerator,以便我可以提取 routecollection 并将其传递给 parent::__contruct()
我的 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]