我刚刚开始使用Symfony并坚持使用“捆绑包”。假设我想实现一个管理面板,允许管理员:
如何实施此类管理面板?管理面板是否应该是一个包含产品/新闻/文章的独立控制器的捆绑包?或者我应该将产品/新闻/文章放入自己的捆绑包中,然后(可能)将它们分组为“管理”包(不确定是否可行)。
答案 0 :(得分:1)
根据最近发布的Symfony Best Practices:
仅为您的应用程序逻辑创建一个名为AppBundle的捆绑包
创建分离的捆绑包,只有它们可以作为独立的软件重用。当然,可以将例如Admin和Front bundle分开,但仅为了清晰的代码。
答案 1 :(得分:0)
如果您正在寻找管理面板的快速实施,SonataAdminBundle值得一看。
您通过composer& amp;导入一些路由,从那里,这是一个定义管理服务和引用您的Products
,News
和Article
实体的类的问题。
我喜欢它因为它是可扩展的&很快就能建立起来。除了过滤器表单,还可以基于每个实体启用/禁用路由,它还可以通过在另一个开箱即可嵌入一个管理界面来处理实体之间的关系。此外,树枝模板是超级模块化的,可以轻松覆盖。
作为一个快速示例(假定为ORM),一旦安装了SonataAdmin,请添加服务定义:(例如取自Sonata Admin Docs)
services:
sonata.admin.pprodut:
class: Acme\DemoBundle\Admin\ProductAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "Product" }
arguments:
- ~
- Acme\DemoBundle\Entity\Product
- ~
...和要匹配的ProductAdmin
课程。
<?php
// src/Acme/DemoBundle/Admin/ProductAdmin.php
namespace Acme\DemoBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
class ProductAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title', 'text', array('label' => 'Product Title'))
->add('sku', 'text')
->add('description') //if no type is specified, SonataAdminBundle tries to guess it
// Other fields ...
;
}
// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('title')
->add('sku')
;
}
// Fields to be shown on lists
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title')
->add('sku')
;
}
}
你要参加比赛了。
然而,如果这是一个练习,而不是可能重新发明轮子,SonataAdmin仍然可以作为一个很好的参考捆绑。 :)