我想配置Symfony locale
选项,以便我可以成功访问以下路由:
/route
/{locale}/route
目前,我可以访问/{locale}/route
并获得我的观点,但是/route
会返回No route found for "GET /route"
。我的配置如下:
#app/config/parameters.yml
parameters:
locale: en
#app/config/config.yml
parameters:
app_locales: en|fr
framework:
translator: { fallback: "%locale%" }
default_locale: "%locale%"
#app/config/routing.yml
app:
resource: '@AppBundle/Controller/'
type: annotation
我的控制器有以下注释:
#src/AppBundle/Controller/Admin/MyController.php
/**
*
* @Route(
* "/{_locale}/admin/my",
* defaults={"_locale":"%locale%"},
* requirements={"_locale":"%app_locales%"}
* )
*/
class MyController extends Controller
{
/**
* @Route("/", name="admin_my_list")
* @Method("GET")
*/
public function listAction()
{
...
}
}
如果我具体包含locale
,那一切都有效。如果我排除了locale
,则会收到No route found
错误。
答案 0 :(得分:4)
您必须定义另一条路线来覆盖没有提供区域设置的方案,请尝试将路线定义更改为:
#src/AppBundle/Controller/Admin/MyController.php
class MyController extends Controller
{
/**
* @Route(
* "/admin/my",
* defaults={"_locale":"%locale%"},
* )
* @Route(
* "/{_locale}/admin/my",
* requirements={"_locale":"%app_locales%"}
* )
* @Method("GET")
*/
public function listAction()
{
...
}
}
答案 1 :(得分:0)
我同意鲍里斯在那里评论的内容。
关于创建RouteMatcher的另一种解决方案是使用EventListener并将用户重定向到same route with the default Locale(检查具有更多upvotes的答案)
在我看来,像Athlan这样的EventListeners解释说还有很长的路要走。我不会搞砸你自己的RouteMatcher。 只要看看lordrhodos写的是什么,就不要试图在Controller注释中放置这样的两条路径,但我想如果你只有一个Controller就可以了。如果它们将会很多,那么只能在一个地方使用EventListeners来实现这一目标。