Я только начал с Symfony и застрял с «пучками». Предположим, я хочу реализовать панель администратора, которая позволяет администратору:
Как мне реализовать такую панель администратора? Должна ли административная панель быть одним комплектом с отдельными контроллерами для продуктов / новостей / статей? Или я должен поместить продукты / новости / статьи в свои собственные группы, а затем (возможно) сгруппировать их в «административные» пакеты (не уверен, если это возможно).
Согласно недавно выпущенному Symfony Best Practices:
Создайте только один пакет под названием AppBundle для логики вашего приложения
Создавайте отдельные пакеты, только они могут быть использованы в качестве самостоятельного программного обеспечения. Конечно, можно отделить, например, Admin и Front, но только для ясности кода.
Если вы ищете быструю реализацию админ-панели, 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 все еще может служить хорошим справочным набором. 🙂