Symfony2 Twig:使用自定义加载程序加载模板时,url / path函数不存在

时间:2013-03-31 01:10:56

标签: symfony twig

我根据这个食谱写了一个自定义的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]

1 个答案:

答案 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');