Я переписываю свое приложение на базе 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
, где я бы указалпрефикс над классом и расширение, 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/
, оно не может совпадатьмаршрут.