4

我的路由定义如下:

# New URLs
article_show:
    pattern:  /article/{id}
    defaults: { _controller: AcmeDemoBundle:Article:show }

# Old URLs
article_show_legacy:
    path:            /article-{id}-{param}.html
    requirements:
        param: foo|bar
    defaults:
        _controller: FrameworkBundle:Redirect:redirect
        route:       article_show
        permanent:   true

我想知道如何在没有参数的情况下重定向article_show_legacy到。每当我访问(例如)时,我都会被重定向到. 我想丢弃,所以我被重定向到.article_showparam/article-1-foo.html/article/1?param=foo?param=foo/article/1

我知道我可以创建一条路线foo和一条路线,bar但就我而言,还有更多案例。

我必须编写自己的重定向控制器吗?

4

1 回答 1

1

您必须编写自己的重定向控制器或在任何现有控制器中创建重定向方法。

检查in 的redirect操作RedirectController../vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.php获取更多详细信息。

一些例子(我添加了第三个选项stripAttributes):

public function redirectAction($route, $permanent = false, $stripAttributes = false)
{
    if ('' == $route) {
        return new Response(null, $permanent ? 410 : 404);
    }

    $attributes = array();
    if (!$stripAttributes) {
        $attributes = $this->container->get('request')->attributes->get('_route_params');
        unset($attributes['route'], 
              $attributes['permanent'], 
              $attributes['stripAttributes']);
    }

    return new RedirectResponse($this->container->get('router')->generate($route, $attributes, UrlGeneratorInterface::ABSOLUTE_URL), $permanent ? 301 : 302);
}
于 2013-04-03T14:09:31.160 回答