【问题标题】:Is there a way to "Inherit" a controller's prefix in Symfony 2?有没有办法在 Symfony 2 中“继承”控制器的前缀?
【发布时间】: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") 即可。
  • 这只是一个简单的例子,实际的例子实际上要复杂得多,可能需要我一次更改根前缀,我宁愿不必经过几十个控制器改变这个。

标签: php symfony


【解决方案1】:

您可以为完整的 RouteCollection 指定前缀。使用注解时,每个控制器都是一个集合。但是每个导入的资源也是一个集合。这意味着您可以使用 /admin 前缀和带有 /news 前缀的控制器导入 admin 资源:

# 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
// ...

【讨论】:

  • 好的,我想我知道你在说什么,我会试一试,可能还会问几个问题。
  • 我还没有找到任何这样做的方法,但是有没有办法将单独包中的路由添加到另一个包的路由集合中?在我的示例中,会有一个 AdminBundle,NewsBundle 将添加来自某些类的路由,例如NewsAdminController,到 AdminController RouteCollection。
猜你喜欢
  • 2016-09-18
  • 2020-04-16
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2011-12-06
  • 2023-01-24
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多