2014-11-02 110 views
1

我剛剛開始與Symfony並堅持「捆綁」。假設我想實現一個管理面板,它允許管理員:Symfony - 實現管理面板

  1. 管理產品
  2. 管理文章
  3. 管理新聞

如何去實現這樣的管理面板?管理面板應該是單獨的產品/新聞/文章控制器捆綁包嗎?或者我應該將產品/新聞/文章放入他們自己的捆綁包中,然後(可能)將他們分組爲一個「管理」捆綁包(不確定這是否可行)。

回答

1

根據最近公佈的Symfony Best Practices

爲您的應用程序邏輯

創建分離束只創建一個包叫的appbundle,只有他們可以重複使用的軟件的獨立片。當然,可以分開例如Admin和Front bundle,但只是爲了清晰的代碼。

0

如果您正在尋找快速實施的管理面板,SonataAdminBundle值得一看。

您通過作曲家&進口安裝一些路線,並從那裏,它的定義管理服務的問題,並引用您的ProductsNewsArticle實體類。

我喜歡它,因爲它是可擴展的&非常快速設置。除了篩選表單以及基於每個實體啓用/禁用路由之外,它還可以通過將另一個管理界面嵌入另一個框中來處理實體之間的關係。此外,樹枝模板是超級模塊化的,並且可以輕鬆覆蓋。

作爲一個簡單的例子(假定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仍然可以作爲一個很好的參考包。 :)