Symfony — Реализация панели администратора

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

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

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

1

Решение

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

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

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

1

Другие решения

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

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

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

В качестве быстрого примера (предполагающего использование ORM) после установки SonataAdmin добавьте определение службы: (например, взято из Соната Админ Документы)

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 все еще может служить хорошим справочным набором. 🙂

0

По вопросам рекламы [email protected]