zend-blog-3-backend
155 строк · 4.7 Кб
1<?php
2
3namespace App\Controller\API;
4
5use App\API\Transformers\PygmentsLanguageTransformer;
6use App\Controller\BaseController;
7use App\Entity\PygmentsLanguage;
8use App\Form\PygmentsLanguageFormType;
9use App\Repository\PygmentsLanguageRepository;
10use Symfony\Component\HttpFoundation\JsonResponse;
11use Symfony\Component\HttpFoundation\Request;
12use Symfony\Component\HttpFoundation\Response;
13use Symfony\Component\Routing\Annotation\Route;
14use Symfony\Component\Validator\Validator\ValidatorInterface;
15
16/**
17* @Route("/api/pygmentsLanguages")
18*/
19class PygmentsLanguageController extends BaseController
20{
21/**
22* @Route("", methods={"GET"})
23*
24* @param Request $request
25* @param PygmentsLanguageRepository $repository
26*
27* @return JsonResponse
28*/
29public function findAllAction(Request $request, PygmentsLanguageRepository $repository): JsonResponse
30{
31$pagination = $this->paginate(
32$repository->getListQuery(true),
33$request->query->get('page', 1)
34);
35
36$result = $this->getDataConverter()
37->getPygmentsLanguageArray($pagination);
38
39return new JsonResponse($result);
40}
41
42/**
43* @Route("/{id}", requirements={"id": "\d+"}, methods={"GET"})
44*
45* @param PygmentsLanguage $entity
46*
47* @return JsonResponse
48*/
49public function findAction(PygmentsLanguage $entity): JsonResponse
50{
51$result = $this->getDataConverter()
52->getPygmentsLanguage($entity);
53
54return new JsonResponse($result);
55}
56
57/**
58* @Route("", methods={"POST"})
59*
60* @param ValidatorInterface $validator
61* @param Request $request
62*
63* @throws \Psr\Container\ContainerExceptionInterface
64* @throws \Psr\Container\NotFoundExceptionInterface
65*
66* @return JsonResponse
67*/
68public function createAction(ValidatorInterface $validator, Request $request): JsonResponse
69{
70$form = $this->createObjectForm('pygmentsLanguage', PygmentsLanguageFormType::class);
71$form->handleRequest($request);
72
73[$formData, $errors] = $this->handleForm($form);
74if ($errors) {
75return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
76}
77
78$entity = new PygmentsLanguage();
79PygmentsLanguageTransformer::reverseTransform($entity, $formData['pygmentsLanguage']);
80
81$errors = $this->validate($validator, $entity);
82if (count($errors) > 0) {
83return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
84}
85
86$this->em->persist($entity);
87$this->em->flush();
88
89return new JsonResponse($this->getDataConverter()->getPygmentsLanguage($entity), Response::HTTP_CREATED);
90}
91
92/**
93* @Route("/{id}", requirements={"id": "\d+"}, methods={"PUT"})
94*
95* @param ValidatorInterface $validator
96* @param Request $request
97* @param PygmentsLanguage $entity
98*
99* @throws \Psr\Container\ContainerExceptionInterface
100* @throws \Psr\Container\NotFoundExceptionInterface
101*
102* @return JsonResponse
103*/
104public function updateAction(ValidatorInterface $validator, Request $request, PygmentsLanguage $entity): JsonResponse
105{
106$form = $this->createObjectForm('pygmentsLanguage', PygmentsLanguageFormType::class, true);
107$form->handleRequest($request);
108
109[$formData, $errors] = $this->handleForm($form);
110if ($errors) {
111return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
112}
113
114PygmentsLanguageTransformer::reverseTransform($entity, $formData['pygmentsLanguage']);
115
116$errors = $this->validate($validator, $entity);
117if (count($errors) > 0) {
118return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
119}
120
121$this->em->persist($entity);
122$this->em->flush();
123
124return new JsonResponse($this->getDataConverter()->getPygmentsLanguage($entity));
125}
126
127/**
128* @Route("/{id}", requirements={"id": "\d+"}, methods={"DELETE"})
129*
130* @param PygmentsLanguage $entity
131*
132* @throws \Doctrine\ORM\Exception\ORMException
133*
134* @return JsonResponse
135*/
136public function deleteAction(PygmentsLanguage $entity): JsonResponse
137{
138$this->getEm()->remove($entity);
139$this->getEm()->flush();
140
141return new JsonResponse(true);
142}
143
144/**
145* @Route("/list", name="language_choices", options={"expose"=true}, methods={"GET"})
146*
147* @param PygmentsLanguageRepository $repository
148*
149* @return JsonResponse
150*/
151public function ajaxLanguagesListAction(PygmentsLanguageRepository $repository): JsonResponse
152{
153return new JsonResponse($repository->getNamesArray());
154}
155}
156