Symfony 4 中多个控制器中的分组路由

Grouped routes in multiple controllers in Symfony 4

我正在将基于 Silex 的应用程序重写为 Symfony 4,因为 Silex 将在一段时间后被弃用。到目前为止一切都很好,但我对嵌套路由有疑问。

我在 Silex 应用程序中有很多嵌套(子路由),并分配了不同的控制器。

$app->match('/api', function (ControllerCollection $api) {
    $api->get('/homepage', 'ControllerOne::index');
    $api->get('/contact', 'ControllerTwo::index');
});

这在 Silex 中非常简单,但现在在 Symfony 4 中,我使用注释来管理路由,但似乎找不到对这些路由进行分组的方法。

这很烦人,尤其是当涉及到带有 _locale 的路由时,因为这些路由的语法很长而且仍然..如果我需要更改 _locale 某天作为 /home/{_locale}/.

之类的前缀
ControllerOne extends Controller 
{
    /**
     * @Route("/{_locale}/",
     *     name="root",
     *     methods="GET",
     *     requirements={"_locale": "en|fr"}
     * )
     *
     * @return Response
     */
    public function index(): Response
    {
        return $this->render('some.html.twig');
    }
}

ControllerTwo extends Controller
{
    /**
     * @Route("/{_locale}/homepage",
     *     name="homepage",
     *     methods="GET",
     *     requirements={"_locale": "en|fr"}
     * )
     *
     * @return Response
     */
    public function index(): Response
    {
        return $this->render('some2.html.twig');
    }
}

更新

我想创建某种类型的 PrefixedController,我会在 class 上指定前缀并扩展 PrefixedController 而不是基本的 Controller, 不过好像不行。

/**
 * @Route("/{_locale}", requirements={"_locale": "en|fr"})
 */
controller PrefixedController extends Controller 
{
}

controller ControllerOne extends PrefixedController
{
    /**
     * @Route("/", methods="GET")
     * @Return Response
     */
    public function index(): Response 
    {
        return $this->render('some.html.twig');
    }
}

但是当我导航到/en/时,它无法匹配路线。

这可以在导入路由资源的主路由文件中完成。在 Symfony 4 中它位于 config/routes/annotations.yaml。然后为导入的路由提供前缀 /{_locale} 使用 prefix 选项:

# config/routes/annotations.yaml
controllers:
    resource: '../src/Controller/'
    type: annotation
    prefix: /{_locale}

从新路由资源加载的每条路由的路径现在将以占位符 /{_locale}.

为前缀