sf-api-example/src/AppBundle/Controller/Api/CategoryController.php
2016-11-24 00:12:34 +01:00

102 lines
2.4 KiB
PHP

<?php
namespace AppBundle\Controller\Api;
use Symfony\Component\HttpFoundation\Request;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\View\View;
use FOS\RestBundle\Controller\FOSRestController;
use AppBundle\Entity\Category;
use AppBundle\Form\CategoryType;
/**
* class CategoryController.
*
* Les controleurs de ce type (chargés un à un via `routing.yml`)
* permettent de créer des accès type API.
*
* La nomenclature des méthodes permettent de définir
* le type de requête HTTP permis et la route associée.
*
* Il est possible de modifier le chemin (je l'ai fais pour l'exemple).
*
* Tout ce qui est @ApiDoc permet de générer les données pour la sandox
* qui fait aussi office de documentation pour l'API.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class CategoryController extends FOSRestController
{
/**
* Get categories.
*
* @Rest\View
*
* @ApiDoc(
* description="Get categories.",
* )
*
* @param Request $request
*
* @return array
*/
public function getCategoriesAction(Request $request)
{
return $this->getDoctrine()
->getRepository(Category::class)
->findAll();
}
/**
* Get a category.
*
* @Rest\View
*
* @ApiDoc(
* description="Get a category.",
* )
*
* @param Request $request
*
* @return mixed
*/
public function getCategoryction(Request $request, Category $category)
{
return $category;
}
/**
* Create a category.
*
* @Rest\View
* @Rest\Post("/categories/new")
* @ApiDoc(
* description="Create a category.",
* input={
* "class"="AppBundle\Form\CategoryType"
* }
* )
*
* @param Request $request
*
* @return mixed
*/
public function postCategoryNewAction(Request $request)
{
$object = new Category();
$form = $this->createForm(CategoryType::class, $object);
$form->handleRequest($request);
if (!$form->isSubmitted() || !$form->isValid()) {
return $this->view($form->getErrors(true), 400);
}
$em = $this->getDoctrine()->getManager();
$em->persist($form->getData());
$em->flush();
return ['status' => true];
}
}