src/Controller/PostController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DTO\PostNotification;
  4. use App\Entity\Post;
  5. use App\Form\Type\PostFormType;
  6. use App\Manager\PostManager;
  7. use App\Service\NotificationService;
  8. use App\Service\PagerService;
  9. use FOS\RestBundle\Controller\Annotations as Rest;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. /**
  13.  * Class PostController
  14.  * @package App\Controller
  15.  *
  16.  * @Rest\Prefix("/posts")
  17.  */
  18. class PostController extends AbstractController
  19. {
  20.     /**
  21.      * @var PostManager
  22.      */
  23.     protected $postManager;
  24.     /**
  25.      * @var PagerService
  26.      */
  27.     protected $pagerService;
  28.     /**
  29.      * @var NotificationService
  30.      */
  31.     protected $notificationService;
  32.     /**
  33.      * PostController constructor.
  34.      * @param PostManager $postManager
  35.      * @param PagerService $pagerService
  36.      */
  37.     public function __construct(PostManager $postManagerPagerService $pagerServiceNotificationService $notificationService)
  38.     {
  39.         $this->postManager $postManager;
  40.         $this->pagerService $pagerService;
  41.         $this->notificationService $notificationService;
  42.     }
  43.     /**
  44.      * @Rest\Get("")
  45.      * @return Response
  46.      */
  47.     public function getPostsAction()
  48.     {
  49.         $query $this->postManager->getAllPublishedQuery();
  50.         $pagination $this->pagerService->paginate($query);
  51.         return $this->getResponse($pagination);
  52.     }
  53.     /**
  54.      * @Rest\Get("/{post}", requirements={"post": "\d+"})
  55.      * @param Post $post
  56.      * @return Response
  57.      */
  58.     public function getPostAction(Post $post)
  59.     {
  60.         return $this->getResponse($postResponse::HTTP_OK, ['Default''Item']);
  61.     }
  62.     /**
  63.      * @Rest\Post("")
  64.      * @param Request $request
  65.      * @return Response
  66.      */
  67.     public function postPostAction(Request $request)
  68.     {
  69.         $post $this->postManager->create();
  70.         $form $this->createForm(PostFormType::class, $post);
  71.         $form->submit($request->request->all());
  72.         if (!$form->isValid()) {
  73.             return $this->getResponse($formResponse::HTTP_BAD_REQUEST);
  74.         }
  75.         $this->postManager->update($post);
  76.         if ($request->request->get("notification")) {
  77.             $this->notificationService->send(new PostNotification($post));
  78.         }
  79.         return $this->getResponse($postResponse::HTTP_CREATED, ['Default''Item']);
  80.     }
  81.     /**
  82.      * @Rest\Patch("/{post}", requirements={"post": "\d+"})
  83.      * @param Request $request
  84.      * @return Response
  85.      */
  86.     public function pathPostAction(Request $requestPost $post)
  87.     {
  88.         $form $this->createForm(PostFormType::class, $post);
  89.         $form->submit($request->request->all(), false);
  90.         if (!$form->isValid()) {
  91.             return $this->getResponse($formResponse::HTTP_BAD_REQUEST);
  92.         }
  93.         $this->postManager->update($post);
  94.         return $this->getResponse($postResponse::HTTP_OK, ['Default''Item']);
  95.     }
  96.     /**
  97.      * @Rest\Delete("/{post}", requirements={"post": "\d+"})
  98.      * @param Post $post
  99.      * @return Response
  100.      */
  101.     public function deletePostAction(Post $post)
  102.     {
  103.         $this->postManager->remove($post);
  104.         return $this->getResponse($postResponse::HTTP_NO_CONTENT);
  105.     }
  106. }