如何在symfony 2中创建映射到外部URL的路由?

时间:2013-07-26 10:10:00

标签: php symfony twig

参考这个,

http://symfony.com/doc/current/book/routing.html

我们可以将url模式映射到控制器和操作

应用程序/配置/ routing.yml中

blog_show:
    path:      /blog/{slug}
    defaults:  { _controller: AcmeBlogBundle:Blog:show }

我想将路径映射到外部网址。

应用程序/配置/ routing.yml中

blog_show:
    path:      /blog/{slug}
    defaults:  "www.example.com/blog"

要求是,我现在的网站是kohana,我将它逐渐移植到symfony 2.对于我的symfony2 app kohana URL就像外部网址,我想在路由中配置这些网址并以标准方式使用它们,< / p>

e.g。在Twig,

<a href="{{ path('blog_show'}}">
  Read this blog post.
</a>

所以稍后当我将我的页面移植到Symfony时,我将只需要更改路由文件,这样我就可以使用相同的blog_show键来引用url,而且我不必更改我使用url的所有文件。

4 个答案:

答案 0 :(得分:8)

您可以使用其中一个Symfony框架控制器执行此操作,但我不确定这如何适用于参数:

blog_show:
    path: /blog/{slug}
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: "http://example.com/blog"
        permanent: true

请注意,path: /blog/{slug}直接抓取了slug,但path: "http://example.com/blog/{slug}"无效。

来源http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

答案 1 :(得分:1)

从Symfony 2.2开始,可以通过向路由添加主机约束来实现:

的routing.yml

user_homepage:
  path: /path/to/whatever
  host: "sub.domain.ext"
  defaults: 
    _controller: forExampleAnyNamespaceBundle:Controller:action

这是关于此问题的官方博客文章:http://symfony.com/blog/new-in-symfony-2-2-url-host-support-in-the-routing

答案 2 :(得分:-2)

Symfony的路由器功能无法正常工作......

我建议你为此创建一个Twig扩展。在这里阅读更多相关信息: http://symfony.com/doc/current/cookbook/templating/twig_extension.html

您可以创建一个与常规url()函数非常相似的函数,这样您就可以尽可能轻松地进行迁移。

{{ legacyUrl('blog_post', {slug: 'my-blog-post'}) }}

将博客迁移到Symfony之后,您只需创建一个名为“blog_post”的路径并将“legacyUrl”更改为“url”。

答案 3 :(得分:-2)

似乎没有本地Symfony方法来处理这个问题。