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