diff --git a/src/Controller/Blog/CategoryAdminController.php b/src/Controller/Blog/CategoryAdminController.php index 53a8335..2ca02cc 100644 --- a/src/Controller/Blog/CategoryAdminController.php +++ b/src/Controller/Blog/CategoryAdminController.php @@ -12,24 +12,72 @@ use App\Repository\Blog\PostRepositoryQuery; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use App\Core\Controller\Admin\Crud\CrudController; +use App\Core\Crud\CrudConfiguration; +use Symfony\Component\HttpFoundation\Session\Session; +use App\Core\Crud\Field\TextField; +use App\Form\Blog\CategoryType; +use App\Core\Crud\Field\ButtonField; +use App\Core\Entity\EntityInterface; /** * @Route("/admin/blog/category") */ -class CategoryAdminController extends AdminController +class CategoryAdminController extends CrudController { + public function getConfiguration(): CrudConfiguration + { + return CrudConfiguration::create() + ->setPageTitle('index', 'Catégories') + ->setPageTitle('edit', '{title}') + ->setPageTitle('new', 'Nouvelle catégorie') + ->setPageTitle('show', '{title}') + + ->setPageRoute('index', 'admin_blog_category_index') + ->setPageRoute('new', 'admin_blog_category_new') + ->setPageRoute('edit', 'admin_blog_category_edit') + ->setPageRoute('show', 'admin_blog_category_show') + ->setPageRoute('delete', 'admin_blog_category_delete') + ->setPageRoute('filter', 'admin_blog_category_filter') + + ->setForm('edit', CategoryType::class, []) + ->setForm('new', CategoryType::class) + // ->setForm('filter', FooFilterType::class) + + ->setMaxPerPage('index', 100) + + ->setAction('index', 'new', true) + ->setAction('index', 'show', true) + ->setAction('index', 'edit', true) + ->setAction('index', 'delete', true) + + ->setAction('edit', 'back', true) + ->setAction('edit', 'show', true) + ->setAction('edit', 'delete', true) + + ->setField('index', 'Titre', TextField::class, [ + 'property' => 'title', + ]) + ->setField('index', 'Articles', ButtonField::class, [ + 'property_builder' => function(EntityInterface $entity) { + $count = $entity->getPosts()->count(); + + return ''.$count.' article'.($count > 1 ? 's' : ''); + }, + 'button_attr' => ['class' => 'btn btn-sm btn-light border'], + 'raw' => true, + ]) + ; + } + /** * @Route("/{page}", name="admin_blog_category_index", requirements={"page": "\d+"}) */ - public function index(int $page = 1, RepositoryQuery $query, Request $request): Response + public function index(int $page = 1, RepositoryQuery $query, Request $request, Session $session): Response { - $pager = $query - ->orderBy('.title', 'ASC') - ->paginate($page, 100); + $query->orderBy('.title', 'ASC'); - return $this->render('blog/category_admin/index.html.twig', [ - 'pager' => $pager, - ]); + return $this->doIndex($page, $query, $request, $session); } /** @@ -37,27 +85,9 @@ class CategoryAdminController extends AdminController */ public function new(EntityFactory $factory, EntityManager $entityManager, Request $request): Response { - $entity = $factory->create(); - $form = $this->createForm(EntityType::class, $entity); + $this->getConfiguration()->setView('newForm', 'blog/category_admin/_form.html.twig'); - if ($request->isMethod('POST')) { - $form->handleRequest($request); - - if ($form->isValid()) { - $entityManager->create($entity); - $this->addFlash('success', 'Donnée enregistrée.'); - - return $this->redirectToRoute('admin_blog_category_edit', [ - 'entity' => $entity->getId(), - ]); - } - $this->addFlash('warning', 'Le formulaire est invalide.'); - } - - return $this->render('blog/category_admin/new.html.twig', [ - 'form' => $form->createView(), - 'entity' => $entity, - ]); + return $this->doNew($factory->create(), $entityManager, $request); } /** @@ -65,26 +95,9 @@ class CategoryAdminController extends AdminController */ public function edit(Entity $entity, EntityManager $entityManager, Request $request): Response { - $form = $this->createForm(EntityType::class, $entity); + $this->getConfiguration()->setView('editForm', 'blog/category_admin/_form.html.twig'); - if ($request->isMethod('POST')) { - $form->handleRequest($request); - - if ($form->isValid()) { - $entityManager->update($entity); - $this->addFlash('success', 'Donnée enregistrée.'); - - return $this->redirectToRoute('admin_blog_category_edit', [ - 'entity' => $entity->getId(), - ]); - } - $this->addFlash('warning', 'Le formulaire est invalide.'); - } - - return $this->render('blog/category_admin/edit.html.twig', [ - 'form' => $form->createView(), - 'entity' => $entity, - ]); + return $this->doEdit($entity, $entityManager, $request); } /** @@ -99,10 +112,10 @@ class CategoryAdminController extends AdminController ->paginate(1, 10) ; - return $this->render('blog/category_admin/show.html.twig', [ - 'entity' => $entity, - 'posts' => $posts, - ]); + $this->getConfiguration()->setView('showEntity', 'blog/category_admin/_show.html.twig'); + $this->getConfiguration()->addViewData('show', 'posts', $posts); + + return $this->doShow($entity); } /** @@ -110,13 +123,7 @@ class CategoryAdminController extends AdminController */ public function delete(Entity $entity, EntityManager $entityManager, Request $request): Response { - if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { - $entityManager->delete($entity); - - $this->addFlash('success', 'Données supprimée..'); - } - - return $this->redirectToRoute('admin_blog_category_index'); + return $this->doDelete($entity, $entityManager, $request); } public function getSection(): string diff --git a/templates/blog/category_admin/_show.html.twig b/templates/blog/category_admin/_show.html.twig new file mode 100644 index 0000000..af534a3 --- /dev/null +++ b/templates/blog/category_admin/_show.html.twig @@ -0,0 +1,63 @@ +
Derniers articles | +
---|
+ + {{ item.title }} + + | +
+
+
+
+
+ Aucun résultat
+
+ |
+
Titre | -Articles | -Actions | -
---|---|---|
- - {{ item.title }} - - | -- - {% set postsCount = item.posts|length %} - - {{ postsCount }} {{ postsCount < 2 ? 'article' : 'articles' }} - - | -- - - - - - - | -
-
-
-
-
- Aucun résultat
-
- |
-
Derniers articles | -
---|
- - {{ item.title }} - - | -
-
-
-
-
- Aucun résultat
-
- |
-