-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathCategoryController.php
More file actions
106 lines (89 loc) · 3.32 KB
/
CategoryController.php
File metadata and controls
106 lines (89 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
declare(strict_types=1);
namespace App\Controller\Admin;
use App\Controller\BaseController;
use App\Entity\Category;
use App\Form\Type\CategoryType;
use App\Repository\CategoryRepository;
use App\Service\Admin\CategoryService;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\SubmitButton;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Routing\Requirement\Requirement;
use Symfony\Component\Security\Http\Attribute\IsGranted;
final class CategoryController extends BaseController
{
#[Route(path: '/admin/category', name: 'admin_category')]
public function index(Request $request, CategoryRepository $repository): Response
{
$categories = $repository->findAll();
return $this->render('admin/category/index.html.twig', [
'site' => $this->site($request),
'categories' => $categories,
]);
}
#[Route(path: '/admin/category/new', name: 'admin_category_new')]
public function new(Request $request, CategoryService $service): Response
{
$category = new Category();
$form = $this->createForm(CategoryType::class, $category)
->add('saveAndCreateNew', SubmitType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$service->create($category);
/** @var SubmitButton $button */
$button = $form->get('saveAndCreateNew');
if ($button->isClicked()) {
return $this->redirectToRoute('admin_category_new');
}
return $this->redirectToRoute('admin_category');
}
return $this->render('admin/category/new.html.twig', [
'site' => $this->site($request),
'category' => $category,
'form' => $form,
]);
}
/**
* Displays a form to edit an existing Category entity.
*/
#[Route(
path: '/admin/category/{id}/edit',
name: 'admin_category_edit',
requirements: ['id' => Requirement::POSITIVE_INT],
methods: ['GET', 'POST']
)]
public function edit(Request $request, Category $category, CategoryService $service): Response
{
$form = $this->createForm(CategoryType::class, $category);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$service->update($category);
return $this->redirectToRoute('admin_category');
}
return $this->render('admin/category/edit.html.twig', [
'site' => $this->site($request),
'form' => $form,
]);
}
/**
* Deletes a Category entity.
*/
#[Route(
path: '/category/{id}/delete',
name: 'admin_category_delete',
requirements: ['id' => Requirement::POSITIVE_INT],
methods: ['POST']
)]
#[IsGranted('ROLE_ADMIN')]
public function delete(Request $request, Category $category, CategoryService $service): Response
{
if (!$this->isCsrfTokenValid('delete', $request->getPayload()->get('token'))) {
return $this->redirectToRoute('admin_category');
}
$service->remove($category);
return $this->redirectToRoute('admin_category');
}
}