symfony api rest bundle


librerias a instalar:

composer require friendsofsymfony/rest-bundle
composer require jms/serializer-bundle

habilitarlos:

new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),

para efectos de orden y no poner todo en el AppBundle voy a crear un bundle nuevo en donde manejare los controladores de la api

por consola:


php bin/console generate:bundle

llamemosle p.e ApiRestBundle

actualizar composer.json
en eclipse:

abrir composer.json ir a la pestaña de "autoload"
en el panel de psr-4 click en add ,
en el cuadro de dialogo
namespace: ApiRestBundle\ 
y en paths seleccionar el floder src/ApiRestBundle

luego por consola ejecutar:

composer dump-autoload

el comando de creacion de bundle
lo agrega automaticamente al AppKernel.php
y tambien genera una entrada en routing.yml

editemos el prefix en el routing, para que las llamadas sean precedidas por "api" entonces quedaria asi:

api_rest:
    resource: "@ApiRestBundle/Controller/"
    type:     annotation
    prefix:   /api


en config.yml


# JMS serializer configuration
jms_serializer:
    metadata:
        auto_detection: true
    handlers:
        datetime:
            default_format: 'Y-m-d H:i:s'

# FOSRest Configuration
fos_rest:
    body_listener: true
    format_listener:
        rules:
            - { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
            - { path: ^/, priorities: [ html ], fallback_format: html, prefer_extension: true }
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true


se asume que se tiene ya una entidad creada en src/AppBundle/Entity
y su correspondiente repository en src/AppBundle/Repository

por ejemplo para Nota.php existe NotaRepository.php (que extiende de \Doctrine\ORM\EntityRepository)



en src/ApiRestBundle/Controller

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\RestBundle\Controller\FOSRestController;


use FOS\RestBundle\View\View;

class NotasController extends FOSRestController
{
     /**
     * @Route("/notas")
     * @Method("GET")
     */
    public function getAction()
    {
      $restresult = $this->getDoctrine()->getRepository('AppBundle:Nota')->findAll();
      if ($restresult === null)
        {
          return new View("there are no notas exist", Response::HTTP_NOT_FOUND);
      }
        return $restresult;
    }
 
}

y listo!

para probar, se puede abriri Postman

y en la url escribir:

http://localhost/api-test/web/app_dev.php/api/notas

deberia devolver algo asi:

[ { "id": 1, "titulo": "prueba", "contenido": "<p>lalalala</p>\r\n\r\n<p><strong>jojoj</strong></p>\r\n\r\n<p><strong>fefefe</strong></p>\r\n\r\n<ol>\r\n\t<li><strong>kakaka</strong></li>\r\n\t<li>huhuhuh</li>\r\n</ol>", "imagen": "24955519_922259481269966_842653723684610281_o.jpg", "esta_activo": true, "posicion": 2, "updated_at": "2017-12-14 04:10:23", "created_at": "2017-12-14 04:10:23" }, { "id": 2, "titulo": "otra prueba", "contenido": "<p>jajajaa</p>", "imagen": "160718114905-03-mind-of-bruce-lee-super-tease.jpg", "esta_activo": false, "posicion": 1, "updated_at": "2017-12-14 04:17:47", "created_at": "2017-12-14 04:17:47" } ]





fuentes:

http://www.phpbuilder.com/articles/tools/frameworks/creating-a-rest-api-in-symfony-3.html

https://jeremycurny.com/2016/03/27/symfony3-rest-api/

http://orgullo.users.sourceforge.net/blog/?p=406

https://www.cloudways.com/blog/rest-api-in-symfony-3-1/

ver

https://gist.github.com/diegonobre/341eb7b793fc841c0bba3f2b865b8d66

easyadmin symfony setear campo updatedAt para todas las entidades

crear // src/AppBundle/Controller/AdminController.php

class AdminController extends BaseAdminController
{
    public function preUpdateEntity($entity)
    {
        if (method_exists($entity, 'setUpdatedAt')) {
            $entity->setUpdatedAt(new \DateTime());
        }
    }


en routing.yml

easy_admin_bundle:
    resource: '@AppBundle/Controller/AdminController.php'

symfony eliminar un bundle

1) quitarlo de AppKernel

2) en config.yml quitar cualquier referencia

3) en composer.json quitar la linea del require.

4) ejecutar composer update, esto borra la carpeta del bundle del directorio de vendor

easyadmin cfkeditor

siguiendo las intrucciones de instalacion del bundle cfkeditor

php bin/console ckeditor:install

no hace nada.

asi que continuar con el sgt paso

php bin/console assets:install --symlink

luego ir al archivo

vendor\egeloen\ckeditor-bundle\DependencyInjection\Compiler\ResourceCompilerPass.php

ir a la linea #43

y donde dice

IvoryCKEditorBundle:Form:ckeditor_widget.html.twig

cambiarla por

@IvoryCKEditor/Form/ckeditor_widget.html.twig

y listo.

limpiar la cache

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable