zend-blog-3-backend
154 строки · 4.2 Кб
1<?php
2/**
3* Created by PhpStorm.
4* User: morontt
5* Date: 04.04.16
6* Time: 22:34
7*/
8
9namespace App\Controller\API;
10
11use App\Controller\BaseController;
12use App\Entity\MediaFile;
13use App\Form\ImageFormType;
14use App\Model\Image;
15use App\Repository\MediaFileRepository;
16use App\Service\ImageManager;
17use Symfony\Component\HttpFoundation\JsonResponse;
18use Symfony\Component\HttpFoundation\Request;
19use Symfony\Component\Routing\Annotation\Route;
20
21/**
22* @Route("/api/mediaFiles")
23*
24* Class MediaFileController
25*/
26class MediaFileController extends BaseController
27{
28/**
29* @Route("", methods={"GET"})
30*
31* @param Request $request
32* @param MediaFileRepository $repository
33*
34* @return JsonResponse
35*/
36public function findAllAction(Request $request, MediaFileRepository $repository): JsonResponse
37{
38$params = $request->query->all();
39
40if (!empty($params['post_id'])) {
41$result = $this->getDataConverter()
42->getMediaFileArray(
43array_map(
44function (MediaFile $e) {
45return 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(
58array_map(
59function (MediaFile $e) {
60return new Image($e);
61},
62$pagination->getItems()
63),
64'post'
65);
66
67$result['meta'] = $this->getPaginationMetadata($pagination->getPaginationData());
68}
69
70return new JsonResponse($result);
71}
72
73/**
74* @Route("/{id}", requirements={"id": "\d+"}, methods={"GET"})
75*
76* @param MediaFile $entity
77*
78* @return JsonResponse
79*/
80public function findAction(MediaFile $entity): JsonResponse
81{
82$result = $this->getDataConverter()
83->getMediaFile(new Image($entity));
84
85return 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*/
96public function updateAction(Request $request, MediaFile $entity): JsonResponse
97{
98$result = $this->getDataConverter()
99->saveMediaFile($entity, $request->request->get('mediaFile'));
100
101return 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*/
114public function deleteAction(MediaFile $entity, ImageManager $manager): JsonResponse
115{
116$manager->remove($entity);
117
118return 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*/
132public function uploadAction(Request $request, ImageManager $manager): JsonResponse
133{
134$form = $this->createForm(ImageFormType::class);
135$form->handleRequest($request);
136
137if ($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 = [];
145foreach ($form->get('upload')->getErrors() as $error) {
146$messages[] = $error->getMessage();
147}
148
149return new JsonResponse(['errors' => $messages], 422);
150}
151
152return new JsonResponse(true, 201);
153}
154}
155