Symfony 默认语言环境未在 URL 中指定

Unf*_*lux 4 symfony symfony-routing

我想配置 Symfonylocale选项,以便我可以成功访问以下路由:

/route
/{locale}/route
Run Code Online (Sandbox Code Playgroud)

目前,我可以访问/{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
Run Code Online (Sandbox Code Playgroud)

我的控制器有以下注释:

#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()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我特别包含locale,则一切正常。如果我排除locale,我会收到No route found错误消息。

lor*_*dos 5

您必须定义另一条路线来覆盖没有提供语言环境的场景,请尝试将您的路线定义更改为:

#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()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)