zend-blog-3-backend

Форк
0
/
MediaFileController.php 
154 строки · 4.2 Кб
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: morontt
5
 * Date: 04.04.16
6
 * Time: 22:34
7
 */
8

9
namespace App\Controller\API;
10

11
use App\Controller\BaseController;
12
use App\Entity\MediaFile;
13
use App\Form\ImageFormType;
14
use App\Model\Image;
15
use App\Repository\MediaFileRepository;
16
use App\Service\ImageManager;
17
use Symfony\Component\HttpFoundation\JsonResponse;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\Routing\Annotation\Route;
20

21
/**
22
 * @Route("/api/mediaFiles")
23
 *
24
 * Class MediaFileController
25
 */
26
class MediaFileController extends BaseController
27
{
28
    /**
29
     * @Route("", methods={"GET"})
30
     *
31
     * @param Request $request
32
     * @param MediaFileRepository $repository
33
     *
34
     * @return JsonResponse
35
     */
36
    public function findAllAction(Request $request, MediaFileRepository $repository): JsonResponse
37
    {
38
        $params = $request->query->all();
39

40
        if (!empty($params['post_id'])) {
41
            $result = $this->getDataConverter()
42
                ->getMediaFileArray(
43
                    array_map(
44
                        function (MediaFile $e) {
45
                            return new Image($e);
46
                        },
47
                        $repository->getFilesByPost((int)$params['post_id'])
48
                    )
49
                );
50
        } else {
51
            $pagination = $this->paginate(
52
                $repository->getListQuery(),
53
                $request->query->get('page', 1)
54
            );
55

56
            $result = $this->getDataConverter()
57
                ->getMediaFileArray(
58
                    array_map(
59
                        function (MediaFile $e) {
60
                            return new Image($e);
61
                        },
62
                        $pagination->getItems()
63
                    ),
64
                    'post'
65
                );
66

67
            $result['meta'] = $this->getPaginationMetadata($pagination->getPaginationData());
68
        }
69

70
        return new JsonResponse($result);
71
    }
72

73
    /**
74
     * @Route("/{id}", requirements={"id": "\d+"}, methods={"GET"})
75
     *
76
     * @param MediaFile $entity
77
     *
78
     * @return JsonResponse
79
     */
80
    public function findAction(MediaFile $entity): JsonResponse
81
    {
82
        $result = $this->getDataConverter()
83
            ->getMediaFile(new Image($entity));
84

85
        return new JsonResponse($result);
86
    }
87

88
    /**
89
     * @Route("/{id}", requirements={"id": "\d+"}, methods={"PUT"})
90
     *
91
     * @param Request $request
92
     * @param MediaFile $entity
93
     *
94
     * @return JsonResponse
95
     */
96
    public function updateAction(Request $request, MediaFile $entity): JsonResponse
97
    {
98
        $result = $this->getDataConverter()
99
            ->saveMediaFile($entity, $request->request->get('mediaFile'));
100

101
        return new JsonResponse($result);
102
    }
103

104
    /**
105
     * @Route("/{id}", requirements={"id": "\d+"}, methods={"DELETE"})
106
     *
107
     * @param MediaFile $entity
108
     * @param ImageManager $manager
109
     *
110
     * @throws \Doctrine\ORM\Exception\ORMException
111
     *
112
     * @return JsonResponse
113
     */
114
    public function deleteAction(MediaFile $entity, ImageManager $manager): JsonResponse
115
    {
116
        $manager->remove($entity);
117

118
        return new JsonResponse(true);
119
    }
120

121
    /**
122
     * @Route("/upload", name="upload_image", options={"expose"=true}, methods={"POST"})
123
     *
124
     * @param Request $request
125
     * @param ImageManager $manager
126
     *
127
     * @throws \Doctrine\ORM\Exception\NotSupported
128
     * @throws \Doctrine\ORM\Exception\ORMException
129
     *
130
     * @return JsonResponse
131
     */
132
    public function uploadAction(Request $request, ImageManager $manager): JsonResponse
133
    {
134
        $form = $this->createForm(ImageFormType::class);
135
        $form->handleRequest($request);
136

137
        if ($form->isSubmitted() && $form->isValid()) {
138
            $manager->uploadImage(
139
                $form->get('description')->getData(),
140
                $form->get('post_id')->getData(),
141
                $form->get('upload')->getData()
142
            );
143
        } else {
144
            $messages = [];
145
            foreach ($form->get('upload')->getErrors() as $error) {
146
                $messages[] = $error->getMessage();
147
            }
148

149
            return new JsonResponse(['errors' => $messages], 422);
150
        }
151

152
        return new JsonResponse(true, 201);
153
    }
154
}
155

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

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

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

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