【发布时间】:2015-02-24 00:27:09
【问题描述】:
有没有办法让一个控制器在 Symfony2 中继承另一个控制器的路由前缀?
我想创建一个“管理员”路由和控制器,其他控制器可以从中继承基本前缀,例如管理类会像这样开始:
/**
* @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,但想知道是否有办法在没有该捆绑包的情况下做到这一点。
【问题讨论】:
-
你真的需要这个吗?只需将 @Route("/photos") 替换为 @Route("/admin/photos") 即可。
-
这只是一个简单的例子,实际的例子实际上要复杂得多,可能需要我一次更改根前缀,我宁愿不必经过几十个控制器改变这个。