Symfony路由:如何从UUID重定向到自定义slug

时间:2016-11-03 13:26:19

标签: php symfony redirect

我有一个使用http://example.com/company/d9c363ae-a1b7-11e6-a66d-9e9923e30d94/http://example.com/company/custom-domain.com可以访问的实体。

现在,Company可以有一个slug,但也可以没有。

因此,我想检查它是否有域集,如果它有,如果URL是基于UUID,我想将其重定向到带有slug的版本。如果它没有域集,我只需使用UUID显示页面。

我在this Symfony's tutorial之后完成了这项工作:

# routing.yml

redirect_company_to_domain:
    path: /company/{domain_host_or_id}
    defaults: { _controller: AppBundle:Company:redirectToDomain }
    requirements:
        url: .*/$
    methods: [GET]

在我的控制器中我写了这个方法:

/**
 * Redirect the URLs with a trailing slash to the version without it.
 *
 * @param Request $request
 *
 * @return \Symfony\Component\HttpFoundation\RedirectResponse
 */
public function redirectToDomainAction(Company $company, Request $request)
{
    die(dump($company));
}

问题是永远不会调用控制器。

我错过了什么或做错了什么?为什么路径从未被路径截获?

也许是因为我在routing.yml中混合了注释和配置?因为CompanyController的路由都是使用注释设置的。

但是使用app/console debug:router我可以正确地看到路线集:

redirect_company_to_domain             GET        ANY      ANY    /company/{domain_host_or_id}

此外,我确信本教程中描述的方法可以正常工作,因为我已经实现了删除尾部斜杠。

我不明白为什么它不能进行这种重定向。

1 个答案:

答案 0 :(得分:0)

我认为因为您错误地指定了参数(在括号中)。

你可以试试这个:

redirect_company_to_domain:
    path: /company/{domain_host_or_id}
    defaults: { _controller: AppBundle:Company:redirectToDomain }
    requirements:
        domain_host_or_id: .*/$
    methods: [GET]

我认为这是问题所在,但我并非百分之百确定。你能尝试一下并告诉我们吗?