我有一个使用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}
此外,我确信本教程中描述的方法可以正常工作,因为我已经实现了删除尾部斜杠。
我不明白为什么它不能进行这种重定向。
答案 0 :(得分:0)
我认为因为您错误地指定了参数(在括号中)。
你可以试试这个:
redirect_company_to_domain:
path: /company/{domain_host_or_id}
defaults: { _controller: AppBundle:Company:redirectToDomain }
requirements:
domain_host_or_id: .*/$
methods: [GET]
我认为这是问题所在,但我并非百分之百确定。你能尝试一下并告诉我们吗?