zend-blog-3-backend
142 строки · 4.2 Кб
1<?php
2
3namespace App\Controller\API;
4
5use App\Controller\BaseController;
6use App\Entity\PygmentsCode;
7use App\Event\PygmentCodeEvent;
8use App\Form\PygmentsCodeFormType;
9use App\Repository\PostRepository;
10use App\Repository\PygmentsCodeRepository;
11use Symfony\Component\EventDispatcher\EventDispatcherInterface;
12use Symfony\Component\HttpFoundation\JsonResponse;
13use Symfony\Component\HttpFoundation\Request;
14use Symfony\Component\HttpFoundation\Response;
15use Symfony\Component\Routing\Annotation\Route;
16
17/**
18* @Route("/api/pygmentsCodes")
19*/
20class PygmentsCodeController extends BaseController
21{
22/**
23* @Route("", methods={"GET"})
24*
25* @param Request $request
26* @param PygmentsCodeRepository $repository
27*
28* @return JsonResponse
29*/
30public function findAllAction(Request $request, PygmentsCodeRepository $repository): JsonResponse
31{
32$pagination = $this->paginate(
33$repository->getListQuery(),
34$request->query->get('page', 1)
35);
36
37$result = $this->getDataConverter()
38->getPygmentsCodeArray($pagination, 'language');
39
40return new JsonResponse($result);
41}
42
43/**
44* @Route("/{id}", requirements={"id": "\d+"}, methods={"GET"})
45*
46* @param PygmentsCode $entity
47*
48* @return JsonResponse
49*/
50public function findAction(PygmentsCode $entity): JsonResponse
51{
52$result = $this->getDataConverter()
53->getPygmentsCode($entity);
54
55return new JsonResponse($result);
56}
57
58/**
59* @Route("", methods={"POST"})
60*
61* @param Request $request
62*
63* @throws \Doctrine\ORM\Exception\ORMException
64* @throws \Psr\Container\ContainerExceptionInterface
65* @throws \Psr\Container\NotFoundExceptionInterface
66*
67* @return JsonResponse
68*/
69public function createAction(Request $request): JsonResponse
70{
71$form = $this->createObjectForm('pygmentsCode', PygmentsCodeFormType::class);
72$form->handleRequest($request);
73
74[$formData, $errors] = $this->handleForm($form);
75if ($errors) {
76return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
77}
78
79$result = $this->getDataConverter()->savePygmentsCode(new PygmentsCode(), $formData['pygmentsCode']);
80
81return new JsonResponse($result, Response::HTTP_CREATED);
82}
83
84/**
85* @Route("/{id}", requirements={"id": "\d+"}, methods={"PUT"})
86*
87* @param Request $request
88* @param PygmentsCode $entity
89* @param EventDispatcherInterface $dispatcher
90*
91* @throws \Doctrine\ORM\Exception\ORMException
92* @throws \Psr\Container\ContainerExceptionInterface
93* @throws \Psr\Container\NotFoundExceptionInterface
94*
95* @return JsonResponse
96*/
97public function updateAction(
98Request $request,
99PygmentsCode $entity,
100EventDispatcherInterface $dispatcher
101): JsonResponse {
102$form = $this->createObjectForm('pygmentsCode', PygmentsCodeFormType::class, true);
103$form->handleRequest($request);
104
105[$formData, $errors] = $this->handleForm($form);
106if ($errors) {
107return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
108}
109
110$result = $this->getDataConverter()->savePygmentsCode($entity, $formData['pygmentsCode']);
111
112$dispatcher->dispatch(new PygmentCodeEvent($entity));
113
114return new JsonResponse($result);
115}
116
117/**
118* @Route("/{id}", requirements={"id": "\d+"}, methods={"DELETE"})
119*
120* @param PygmentsCode $entity
121* @param PostRepository $repository
122*
123* @throws \Doctrine\ORM\Exception\ORMException
124*
125* @return JsonResponse
126*/
127public function deleteAction(PygmentsCode $entity, PostRepository $repository): JsonResponse
128{
129$posts = $repository->getPostsByCodeSnippet($entity->getId());
130if (count($posts)) {
131return new JsonResponse(
132['error' => 'this code snippet is used snippet'],
133Response::HTTP_UNPROCESSABLE_ENTITY
134);
135}
136
137$this->getEm()->remove($entity);
138$this->getEm()->flush();
139
140return new JsonResponse(true);
141}
142}
143