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

时间:2018-05-22 12:58:54

标签: php symfony silex symfony4

我正在将基于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的路由时,这很烦人,因为这些路由的语法很长而且仍然...如果我需要更改{{1},这不是一个好的方法。有一天,前缀为_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而不是基本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'); } } 时,它与路线不匹配。

1 个答案:

答案 0 :(得分:3)

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

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

从新路由资源加载的每个路由的路径现在将以占位符/{_locale}作为前缀。