2014-11-02 7 views
1

Я только что начал с Symfony и застрял с «пучками». Предположим, я хочу, чтобы реализовать панель администратора, которая позволяет администратору:Symfony - исполнительная панель администратора

  1. Управление продуктами
  2. Управление Статьи
  3. Управление Новости

Как я могу идти о реализации такой панели администратора? Должна ли панель администратора быть одной связкой с отдельными контроллерами для продуктов/новостей/статей? Или я должен помещать продукты/новости/статьи в свои собственные пакеты, а затем (возможно) группировать их в пакет «admin» (не уверен, что это возможно).

ответ

1

Согласно недавно выпустила Symfony Best Practices:

Создать только один пакет под названием AppBundle для прикладной логики

Создать обособленные пучки, только они могут быть повторно использованы в качестве автономных частей программного обеспечения. Конечно, можно отделить, например, Admin и Front bundle, но только для ясности кода.

0

Если вы ищете быструю реализацию админ-панели, стоит посмотреть SonataAdminBundle.

Вы устанавливаете с помощью композитора & импорта несколько маршрутов, а оттуда, это вопрос определения администратора услуг, а также классы, которые ссылаются на ваш Products, News и Article сущности.

Мне нравится, потому что он расширяемый & очень быстрый, чтобы его настроить. Он также может обрабатывать отношения между объектами, вставляя один интерфейс администратора в другой прямо из коробки, в дополнение к формам фильтрации, и разрешать/отключать маршруты для каждого объекта. Кроме того, шаблоны ветви являются супермодульными и могут быть легко переопределены.

Как простой пример (который предполагает ОРМ) после того, как вы установили 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 все еще может служить хорошим справочным комплектом. :)

Смежные вопросы