4

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

/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错误消息。

4

2 回答 2

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()
    {
        ...
    }
}
于 2017-01-18T15:30:37.357 回答
0

我同意鲍里斯在那里的评论。

关于制作 RouteMatcher 的另一种解决方案是使用 EventListener 并将用户重定向到具有默认语言环境的同一路由(检查有更多赞成票的答案)

在我看来,使用像 Athlan 这样的 EventListeners 来做这件事解释了有路要走。我不会弄乱你自己的 RouteMatcher。看看 lordrhodos 写了什么,从来没有尝试将这样的两条路由放在一个 Controller 注释中,但我认为如果你只有一个 Controller 是要走的路。如果它们会变得很多,那么只在一个地方使用 EventListener 可能会更干净。

于 2017-01-18T15:31:03.303 回答