有没有办法让一个控制器在Symfony2中继承另一个控制器的路由前缀?
我想创建一个"admin"路由和控制器,其他控制器可以从中继承基本前缀,例如 admin 类将启动如下内容:
/**
* @Route("/admin")
*/
class AdminController {...}
然后另一个类可以只"继承"前缀,并用自己的前缀添加到它,例如:
/**
* @Route("/news")
* @InheritPrefix("AdminController") <-- an imaginary annotation to show what I mean
*/
class NewsController
{
/**
* @Route("/", name="admin_news")
*/
public function indexAction() {...}
/**
* @Route("/list-all", name="admin_news_list-all")
*/
public function listAllAction() {...}
}
结果是 URL/admin/news 将被路由到 NewsController::indexAction(),而/admin/news/list-all 将重定向到 NewsController::listAllAction()
然后可以创建第二个类,例如
/**
* @Route("/photos")
* @InheritPrefix("AdminController") <-- an imaginary annotation to show what I mean
*/
class PhotoController
{
/**
* @Route("/new", name="admin_photos_new")
*/
public function newAction() {...}
}
然后 url/admin/photos/new 将重定向到 PhotoController::newAction()
我知道SonataAdminBundle,但想知道是否有办法在没有该捆绑包的情况下做到这一点。
您可以为完整的 RouteCollection 指定前缀。使用批注时,每个控制器都是一个集合。但每个导入的资源也是一个集合。这意味着您可以导入具有/admin
前缀的admin
资源和具有/news
前缀的控制器:
# app/config/routing.yml
_admin:
resource: @AdminBundle/Controller
prefix: /admin
// src/AdminBundle/Controller/AdminController.php
// ...
class AdminController
// ...
// src/AdminBundle/Controller/PhotoAdminController.php
// ...
/**
* @Route("/news")
*/
class PhotoAdminController
// ...