在 URL 中未指定的 Symfony 默认语言环境
Symfony default locale without specifying in URL
我想配置 Symfony locale
选项以便我可以成功访问以下路由:
/route
/{locale}/route
目前,我可以访问 /{locale}/route
并获得我的观点,但是,/route
returns 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
错误。
您必须定义另一个路由来覆盖没有提供的语言环境的场景,请尝试将您的路由定义更改为:
#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()
{
...
}
}
我同意 Boris 在上面的评论。
制作 RouteMatcher 的另一种解决方案是使用 EventListener 并将用户重定向到 same route with the default Locale(检查有更多赞成票的答案)
在我看来,像 Athlan 解释的那样,使用 EventListeners 来做这件事是可行的。我不会搞砸自己制作 RouteMatcher。
看看 lordrhodos 写的,从来没有试过在 Controller 注释中放置两条这样的路由,但我认为如果你只有一个 Controller 是可行的方法。如果他们要很多,那么只在一个地方使用 EventListeners 可能会更干净。
我想配置 Symfony locale
选项以便我可以成功访问以下路由:
/route
/{locale}/route
目前,我可以访问 /{locale}/route
并获得我的观点,但是,/route
returns 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
错误。
您必须定义另一个路由来覆盖没有提供的语言环境的场景,请尝试将您的路由定义更改为:
#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()
{
...
}
}
我同意 Boris 在上面的评论。
制作 RouteMatcher 的另一种解决方案是使用 EventListener 并将用户重定向到 same route with the default Locale(检查有更多赞成票的答案)
在我看来,像 Athlan 解释的那样,使用 EventListeners 来做这件事是可行的。我不会搞砸自己制作 RouteMatcher。 看看 lordrhodos 写的,从来没有试过在 Controller 注释中放置两条这样的路由,但我认为如果你只有一个 Controller 是可行的方法。如果他们要很多,那么只在一个地方使用 EventListeners 可能会更干净。