基本上我想达到的是:
我有这条路:
http://SITENAME/dashboard
http://SITENAME/users
它们被映射到正确的控制器和操作:
/**
* @Route("/dashboard")
*/
public function dashboardAction()
{
// handle the request
}
/**
* @Route("/users")
*/
public function usersAction()
{
// handle the request
}
现在我想让这些其他路径映射到相同的控制器和操作:
http://SITENAME/{companyname}/仪表板
http://SITENAME/{companyname}/用户
CONNYNAMY是我在DB上检查的名称,如果存在,如果不抛出NoDebug异常。
这些路径只会给查询添加一些过滤器,基本上显示相同的数据结构。
我知道我可以创造其他动作,把它们放在前一个动作之后,以便被抓住,但我问是否有什么聪明的…像这样的:
/**
* @Route("/({companyName}/)dashboard")
*/
public function dashboardAction($companyName = null)
{
// handle the request
}
其中companyname是可选的。
谢谢。。。
更新
正如马诺洛建议的那样,我已经尝试过这样的方法,而且效果不错:
/**
* @Route("/dashboard")
* @Route("/{companyName}/dashboard")
*/
public function dashboardAction($companyName = null)
{
// handle the request
}
但我认为有一个聪明的方法来处理它…
最佳答案
看看这个例子:http://symfony.com/doc/current/book/routing.html#routing-with-placeholders
// src/AppBundle/Controller/BlogController.php
// ...
/**
* @Route("/blog/{page}", defaults={"page" = 1})
*/
public function indexAction($page)
{
// ...
}
当路由中未定义页时,它等于1。
但这在您的情况下不起作用,因为您为同一操作定义了两条路径:
/dasboard
/{companyName}/dashboard
所以你有两个选择:
一。为同一个动作定义两条路径(奇怪)。
2.将定义的路由更改为:
/dashboard/{companyName}
(更好)然后,您可以通过相同的操作得到
/dashboard
和/dashboard/{companyName}
。关于database - symfony2路由,数据库中的可选前缀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34205710/