有没有办法在Symfony 2中“继承”控制器的前缀?

时间:2014-12-26 20:02:51

标签: php symfony

有没有办法让一个控制器在Symfony2中继承另一个控制器的路由前缀?

我想创建一个" 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,但想知道是否有办法在没有捆绑的情况下执行此操作。

1 个答案:

答案 0 :(得分:4)

您可以为完整的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
// ...