首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Symfony Twig桥集成Symfony路由和Twig

使用Symfony Twig桥集成Symfony路由和Twig
EN

Stack Overflow用户
提问于 2016-07-13 15:12:21
回答 1查看 677关注 0票数 2

我在代码中使用了Twig和Symfony路由,我想使用Symfony Twig桥与Twig进行集成。

我已经安装了它们,我需要做的是添加到Twig扩展Symfony\Bridge\Twig\Extension\RoutingExtension,这需要Symfony\Component\Routing\Generator\UrlGenerator.。

UrlGenerator需要两个参数:

  • 路线收集
  • 请求上下文

因此,在我的yaml服务文件中有:

代码语言:javascript
复制
    router:
    class: Symfony\Component\Routing\Router
    arguments:
        - '@yaml.file.loader'
        - '%routing.file%'
        - { 'cache_dir' : '%cache.dir%' }
        - '@request.context'
代码语言:javascript
复制
    twig:
    class: Twig_Environment
    calls:
        - ['addExtension', ['@twig.extensions.debug']]
        - ['addExtension', ['@twig.extensions.translate']]
        - ['addExtension', ['@twig.extensions.routing']]
    arguments:
        - '@twig.loader'
        - '%twig.options%'
代码语言:javascript
复制
    twig.extensions.routing:
    class: Symfony\Bridge\Twig\Extension\RoutingExtension
    public: false
    arguments:
        - '@twig.url.generator'

最后,UrlGenerator:

代码语言:javascript
复制
    twig.url.generator:
    class: Symfony\Component\Routing\Generator\UrlGenerator
    public: false
    arguments:
        - '@router'
        - '@request.context'

不幸的是,@路由器不是路由收集类型。它有getRouteCollection方法,允许获取UrlGenerator所需的数据,如果我手动添加扩展,它就能工作。从控制员那里。但是我不想将服务定义分割到不同的文件中,而希望将它们保留在yaml服务定义中。

,所以问题是:如何将参数传递给UrlGenerator,而不是原始对象路由器,而是getRouteCollection的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 16:17:03

有多种方法可以做到这一点:

使用Symfony表达式语言

如果安装了Symfony表达式语言组件,可以在服务定义中这样做:

代码语言:javascript
复制
twig.url.generator:
    class: Symfony\Component\Routing\Generator\UrlGenerator
    public: false
    arguments:
        - "@=service('router').getRouteCollection()"
        - "@request.context"

使用工厂

如果出于某种原因,您不想使用Symfony表达式语言,可以使用一个工厂类来实现它,该类负责实例化您的url生成器。

代码语言:javascript
复制
class UrlGeneratorFactory
{
    private $router;

    private $requestContext;

    public function __construct($router, $requestContext)
    {
        $this->router = $router;
        $this->requestContext = $requestContext;
    }

    public function create()
    {
        return new UrlGenerator($this->router->getRouteCollection(), $this->requestContext);
    }
}

在yaml中,将url生成器定义设置为:

代码语言:javascript
复制
twig.url.generator.factory:
    class: UrlGeneratorFactory
    arguments: ["@router", "@request.context"]

twig.url.generator:
    class:   Symfony\Component\Routing\Generator\UrlGenerator
    factory: ["@twig.url.generator.factory", create]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38355572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档