如何使用Symfony 2软件包设计灵活的管理面板?

Hap*_*per 1 plugins admin symfony

我想创建一个管理包,以某种方式检测其他包并尝试将它们添加到菜单和相同的RBAC上下文.

例如:

  • AdminBundle定义了一个需要身份验证和授权的路由/管理/仪表板.在那里你可以看到菜单中的3个项目,例如:仪表板,配置(存储在数据库中的一些配置)和用户(用户的CRUD,在UserBundle中找到)
  • 然后有人添加了一个ProductBundle,它处理电子商务产品或其他东西的CRUD.不知何故,如果不修改AdminBundle中的任何代码,我们现在有一个新项目'产品',可在/ admin/dashboard菜单中找到
  • 稍后,不再需要产品CRUD,因此我们只删除ProductBundle,它会自动从管理仪表板菜单中消失.

你会如何实现这样的事情?在symfony 2中是否有像这样的插件式设计的原生支持?

Kas*_*een 5

我不知道完整的插件解决方案,但我的方法是:

有一个"主后端"称它为MasterAdminBundle了对话.这个包包含一个base.html.twig,它只是帮助定义管理区域的导航栏和a {% block content %}.它还有一些MenuService显示菜单.我让我的其他bundle在这个服务中注册一个AdminMenu子类,通过使用Tag System就像Voter可以注册一样Security Context(参见这里).

在base.html.twig中,我可能会使用嵌入式控制器来渲染菜单.

现在有了这种框架,您的其他捆绑包可以通过保留自己的管理路由和接口来保持封装:

ProductController现在还ProductAdminController可以@Route("/admin")在类定义中使用路由前缀.然后,任何路由都可以从包中呈现模板,因为模板保存在控制器名称下.Acme\ProductBundle\Resources\views\ProductAdmin\edit_products.html.twig只要他们延长base.html.twigMasterAdminBundle,并把自己的内容放到content块.

对于其他类似的东西你想将其它捆绑到我可能只是继续前进以同样的方式仪表板,请在服务MasterAdminBundle和使用标签其他类加载到它所需的数据.

希望这是有道理的,也许其他人会有更好的解决方案,我也有兴趣听到,因为这也是我现在正在努力解决的问题.