src/AdminBundle/Admin/ServicePageCategoryAdmin.php line 15

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin;
  3. use AdminBundle\Form\Type\ContentType;
  4. use CoreBundle\Entity\ServicePageCategory;
  5. use CoreBundle\Entity\ServicePageCategoryContent;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Form\Type\ModelType;
  9. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  10. use Sonata\MediaBundle\Form\Type\MediaType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. class ServicePageCategoryAdmin extends BaseAdmin
  13. {
  14.     protected function configureRoutes(RouteCollectionInterface $collection): void
  15.     {
  16.         $collection->remove('view');
  17.         $collection->remove('delete');
  18.     }
  19.     /**
  20.      * @param ServicePageCategory $object
  21.      */
  22.     public function prePersist($object): void
  23.     {
  24.         /** @var ServicePageCategoryContent $content */
  25.         foreach ($object->getContent() as $content) {
  26.             $content->setCategory($object);
  27.         }
  28.         $object->setState(1);
  29.     }
  30.     public function preUpdate($object): void
  31.     {
  32.         parent::preUpdate($object);
  33.     }
  34.     protected function configureFormFields(FormMapper $formMapper): void
  35.     {
  36.         $queryBuilder $this->getModelManager()
  37.             ->getEntityManager(ServicePageCategory::class)
  38.             ->createQueryBuilder('spc')
  39.             ->select('spc')
  40.             ->from(ServicePageCategory::class,'spc')
  41.             ->where('spc.parent_category is null');
  42.         $formMapper
  43.             ->with('Контент', ['class' => 'col-lg-6'])
  44.                 ->add('content'ContentType::class, ['label' => false], [
  45.                     'edit' => 'inline',
  46.                     'sortable' => 'position',
  47.                     'admin_code' => 'admin.service.service_page_category_content',
  48.                 ])
  49.             ->end()
  50.             ->with('Доп. информация', ['class' => 'col-lg-6'])
  51.                 ->add('parent_category'ModelType::class, [
  52.                     'label' => 'Родительская категория',
  53.                     'query' => $queryBuilder,
  54.                     'btn_add' => false,
  55.                     'required' => false,
  56.                 ])
  57.                 ->add('image'MediaType::class, [
  58.                     'provider' => 'sonata.media.provider.image',
  59.                     'context'  => 'dc_site',
  60.                     'label' => 'Изображение'
  61.                 ])
  62.                 ->add('url'null, [
  63.                     'label' => 'URL'
  64.                 ])
  65.                 ->add('state'CheckboxType::class, ['label' => 'Отображать на сайте''required' => false])
  66.                 ->add('position'null, ['label' => 'Позиция'])
  67.             ->end()
  68.         ;
  69.     }
  70.     /**
  71.      * @param ListMapper $listMapper
  72.      */
  73.     protected function configureListFields(ListMapper $listMapper): void
  74.     {
  75.         $queryBuilder $this->getModelManager()
  76.             ->getEntityManager(ServicePageCategory::class)
  77.             ->createQueryBuilder('spc')
  78.             ->select('spc')
  79.             ->from(ServicePageCategory::class,'spc')
  80.             ->where('spc.parent_category is null');
  81.         $models = [];
  82.         $models[null] = '';
  83.         /** @var ServicePageCategory $item */
  84.         foreach ($queryBuilder->getQuery()->getResult() as $item) {
  85.             $models[$item->getId()] = $item->getContentByLocale()->getTitle();
  86.         }
  87.         $listMapper->addIdentifier('id')
  88.             ->add('title',null, ['label' => 'Категории сервиса'])
  89.             ->add('parent_category',null, ['label' => 'Родительская категория'])
  90.             ->add('position'null, ['label' => 'Позиция'])
  91.             ->add('_action''actions', [
  92.                 'label' => 'Действия',
  93.                 'actions' => [
  94.                     'edit' => [],
  95.                 ]
  96.             ])
  97.         ;
  98.     }
  99. }