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

Referring to this,

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

we can map url pattern to controller and action

app/config/routing.yml

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

I want to map the path to external url.

app/config/routing.yml

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

The requirement is, my current website is in kohana, I am porting it gradually to symfony 2. For my symfony2 app kohana URL are like external urls, I want to configure these urls in routing and use them in standard way,

e.g. in Twig,

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

So later on when I port my pages to Symfony, I will have to change only routing file so that I could use same blog_show key to refer to url and I wont' have to change all the files where I have used urls.

The router feature of Symfony doesn't work that way...

I suggest you create a Twig extension for this. Read more about this here: http://symfony.com/doc/current/cookbook/templating/twig_extension.html

You could create a function that works very similar to the regular url() function, so you can migrate as easily as possible.

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

After you migrated the blog to Symfony, all you need to do is create a route called "blog_post" and change "legacyUrl" to "url".

Seems there is no native Symfony way to handle this problem.

You can do this by using one of the Symfony framework controllers although I'm not sure how this would work with parameters:

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

Note that path: /blog/{slug} grabs the slug directly, but path: "http://example.com/blog/{slug}" doesn't work.

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

As of Symfony 2.2 this is possible by adding the host constraint to the routes:

routing.yml

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

There's an official blog post on this issue: http://symfony.com/blog/new-in-symfony-2-2-url-host-support-in-the-routing