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

标签 symfony symfony-routing

我想配置 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

我的 Controller 有以下注释:
#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()
    {
        ...
    }
}

关于Symfony 默认语言环境未在 URL 中指定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41721408/

相关文章:

php - 将网站从 Symfony 1.4 移植到 2.0

mysql - Doctrine2 在 Symfony2 中抛出异常

php - Symfony 6 中的命名路由,内部目录中有 Controller

symfony - 用于检索实体的路由器和 {slug}

php - 用 Doctrine 查询语言写入 "NOT IN"

php - Symfony 2.4 中的语言切换器

unit-testing - Symfony2 : How can I choose the environment to use when running unit tests?

php - 使用命令的 Twig 模板中的 URL 域不正确

php - 从 $_POST 请求(不是从 URL)使用 ParamConverter

php - 在 Symfony2 中创建 Bundle 后出现 FileLoaderImportCircularReferenceException