我根据这个食谱写了一个自定义的DatabaseTwigLoader:http://twig.sensiolabs.org/doc/recipes.html#using-a-database-to-store-templates
工作正常。我正在使用此加载程序从数据库加载电子邮件模板,渲染它们并使用swift邮件程序发送它们。
问题是,在渲染模板时,我无法使用路径或url twig函数。返回的错误是:
第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]
答案 0 :(得分:0)
您应该注册RoutingExtension:
$loader = new \Twig_Loader_Filesystem(array(__DIR__ . '/../../Resources/views'));
$twig = new \Twig_Environment($loader);
$twig->addExtension(new RoutingExtension($this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface')));
$twig->render('your_view.html.twig');