zend-blog-3-backend

Форк
0
/
PygmentsCodeController.php 
142 строки · 4.2 Кб
1
<?php
2

3
namespace App\Controller\API;
4

5
use App\Controller\BaseController;
6
use App\Entity\PygmentsCode;
7
use App\Event\PygmentCodeEvent;
8
use App\Form\PygmentsCodeFormType;
9
use App\Repository\PostRepository;
10
use App\Repository\PygmentsCodeRepository;
11
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
12
use Symfony\Component\HttpFoundation\JsonResponse;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpFoundation\Response;
15
use Symfony\Component\Routing\Annotation\Route;
16

17
/**
18
 * @Route("/api/pygmentsCodes")
19
 */
20
class PygmentsCodeController extends BaseController
21
{
22
    /**
23
     * @Route("", methods={"GET"})
24
     *
25
     * @param Request $request
26
     * @param PygmentsCodeRepository $repository
27
     *
28
     * @return JsonResponse
29
     */
30
    public 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

40
        return new JsonResponse($result);
41
    }
42

43
    /**
44
     * @Route("/{id}", requirements={"id": "\d+"}, methods={"GET"})
45
     *
46
     * @param PygmentsCode $entity
47
     *
48
     * @return JsonResponse
49
     */
50
    public function findAction(PygmentsCode $entity): JsonResponse
51
    {
52
        $result = $this->getDataConverter()
53
            ->getPygmentsCode($entity);
54

55
        return 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
     */
69
    public function createAction(Request $request): JsonResponse
70
    {
71
        $form = $this->createObjectForm('pygmentsCode', PygmentsCodeFormType::class);
72
        $form->handleRequest($request);
73

74
        [$formData, $errors] = $this->handleForm($form);
75
        if ($errors) {
76
            return new JsonResponse($errors, Response::HTTP_UNPROCESSABLE_ENTITY);
77
        }
78

79
        $result = $this->getDataConverter()->savePygmentsCode(new PygmentsCode(), $formData['pygmentsCode']);
80

81
        return 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
     */
97
    public function updateAction(
98
        Request $request,
99
        PygmentsCode $entity,
100
        EventDispatcherInterface $dispatcher
101
    ): JsonResponse {
102
        $form = $this->createObjectForm('pygmentsCode', PygmentsCodeFormType::class, true);
103
        $form->handleRequest($request);
104

105
        [$formData, $errors] = $this->handleForm($form);
106
        if ($errors) {
107
            return 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

114
        return 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
     */
127
    public function deleteAction(PygmentsCode $entity, PostRepository $repository): JsonResponse
128
    {
129
        $posts = $repository->getPostsByCodeSnippet($entity->getId());
130
        if (count($posts)) {
131
            return new JsonResponse(
132
                ['error' => 'this code snippet is used snippet'],
133
                Response::HTTP_UNPROCESSABLE_ENTITY
134
            );
135
        }
136

137
        $this->getEm()->remove($entity);
138
        $this->getEm()->flush();
139

140
        return new JsonResponse(true);
141
    }
142
}
143

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.