[英]Symfony - Implementing Admin Panel
我剛開始使用Symfony並被“捆綁”卡住。 假設我要實現一個管理面板,該面板允許管理員執行以下操作:
我該如何實施這樣的管理面板? 管理面板應該與產品/新聞/文章的單獨控制器捆綁在一起嗎? 還是我應該將產品/新聞/文章放在自己的捆綁包中,然后(也許)將它們分組為“管理員”捆綁包(不確定是否可行)。
根據最近發布的Symfony最佳做法 :
僅為您的應用程序邏輯創建一個名為AppBundle的捆綁包
創建單獨的捆綁軟件,只有它們可以作為獨立軟件重用。 當然,可以將例如Admin和Front捆綁包分開,但這僅是為了使代碼清晰。
如果您想快速實現管理面板, SonataAdminBundle值得一看。
您可以通過composer安裝並導入一些路由,然后從那里定義管理服務以及引用您的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仍然可以作為不錯的參考包。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.