基本上我想达到的是:
我有这条路:
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/

10-10 04:48