EasyAdmin, el nuevo admin generator de Symfony

¿Cuántas veces has necesitado un backend, aunque fuera sencillo, para tus aplicaciones Symfony? ¿Cuántas veces has usado o intentado usar el proyecto Sonata? ¿Cuántas veces te has desesperado usándolo? Para la mayoría de programadores que conozco, la respuesta a las tres preguntas es la misma: "casi siempre".

En mi caso personal, dispongo de muchos pequeños proyectos programados con Symfony y a la hora de pensar qué hacer con el backend, siempre tenía las mismas dudas y problemas. Así que hace poco decidí acabar para siempre con esta situación y me lancé a desarrollar EasyAdmin, el nuevo (y sencillo) "admin generator" para aplicaciones Symfony.

Personalmente, estas son las cosas que me gustaría que tuviera un "admin generator" de Symfony (y por eso son también las ideas que me han guiado al desarrollar EasyAdmin):

  • Debe ser sencillo de instalar (menos de dos minutos, como verás a continuación).
  • Debe funcionar bien a la primera sin tener que hacer cosas raras.
  • Debe incluir todas las características esenciales de un backend sin tener que hacer nada (no quiero instalar "dependencias opcionales" para cosas tan básicas como el menú o el paginador).
  • Debe ser visualmente agradable o al menos no ser feísimo (entre otras cosas, EasyAdmin es totalmente responsive).
  • Debe estar documentado (y la documentación debe actualizarse continuamente).

Cómo probar EasyAdmin en tus proyectos

Instalar, configurar y probar el bundle EasyAdmin te va a llevar menos de dos minutos, así que me encantaría que lo probaras y me dijeras si realmente este "admin generator" es útil para ti:

Instalar EasyAdmin (tiempo estimado: 1 minuto)

1. Como sólo estamos probándolo, crea una nueva rama en tu proyecto:

$ git checkout -b probando_easyadmin

2. Instala el bundle:

$ composer require javiereguiluz/easyadmin-bundle

3. Activa el bundle en el kernel de tu proyecto:

// app/AppKernel.php
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new JavierEguiluz\Bundle\EasyAdminBundle\EasyAdminBundle(),
        );
    }
}

4. Carga las rutas del bundle:

# app/config/routing.yml
easy_admin_bundle:
    resource: "@EasyAdminBundle/Controller/"
    type:     annotation
    prefix:   /admin
 
# ...

5. Instala los archivos CSS y JavaScript utilizados por la interfaz del bundle:

$ php app/console assets:install --symlink

Crear el primer backend (tiempo estimado: 30 segundos)

1. Abre el archivo de configuración de tu proyecto y pega lo siguiente:

# app/config/config.yml
easy_admin:
    entities:
        - AppBundle\Entity\Cliente
        - AppBundle\Entity\Pedido
        - AppBundle\Entity\Producto

Lo único que tienes que hacer es cambiar estas tres clases por las clases de las entidades que quieres gestionar mediante el backend. No importa cuántas entidades tengas, ni cómo se llamen ni dónde las guardes.

2. ¡Tu backend ya está listo! Sólo tienes que entrar en la URL /admin de tu proyecto. Verás algo como lo siguiente:

Interfaz por defecto de EasyAdmin

Siguientes pasos

En una aplicación real, seguramente necesitarás configurar algunas de las características del backend. Consulta la documentación de EasyAdminBundle para saber cómo hacerlo.

EasyAdmin es un proyecto muy reciente, por lo que su actividad de desarrollo es frenética. Si quieres seguirlo más cerca y colaborar en su desarrollo, entra en el repositorio github/easyadmin-bundle. Y no olvides pinchar el botón "Star" de GitHub para mostrar tu apoyo al proyecto.

Comentarios

  1. Genial, siempre quise algo así para la administración. Algo realmente sencillo. El Sonata nunca me ha gustado y mi mejor opción era usar SyliusResourceBundle y como quiera tirar el código restante. Espero mejoras...voy probrando.

    Pedro Carlos Abreu Jiménez el 19 de enero de 2015, 15:41:21

  2. Muchas gracias por este gran aporte, no lo he probado aun pero estoy seguro que sera de gran ayuda... Si lo hiciste tu seguro va a resolver todas esas dudas que teniamos al momento del backend, y eso de que no quiero nada complicado para el menu o paginacion resume todo.

    Gracias.

    Ramiro Anacona Meneses el 19 de enero de 2015, 16:04:48

  3. He estado jugando un rato con EasyAdmin y es un excelente trabajo. A ver si dentro de poco no tendremos nada que envidiar al "django admin generator".

    ilyass jaatit el 19 de enero de 2015, 20:46:09

  4. Muchas gracias por éste y todos tus aportes.

    alejandro brun el 19 de enero de 2015, 21:33:22

  5. Qué buena pinta tiene! Habra que trastear un poco con él. Muchas gracias!

    Jesús Miguel Benito Calzada el 19 de enero de 2015, 23:06:47

  6. Enhorabuena por esta grandísima iniciativa. Se esperaba con creces un admin generator más simple que sonata-project y más completo que el generate-admin del framework... Estoy seguro de que tendrá éxito mientras el bundle se mantenga sencillo a la par de flexible. Me ha gustado mucho y espero que poco a poco vaya ganándole terreno a los ya conocidos.

    Ignacio Giménez el 20 de enero de 2015, 23:19:48

  7. Muy buena iniciativa Javier de verdad que esto era necesario. Ahora solo hace falta un EasyUserAdministrator jajaja... Esas mismas preguntas del principio me las hago con FOSUserBundle.

    José Gabriel González el 21 de enero de 2015, 4:29:05

  8. Genial, mil gracias, qué falta hacía. Voy a probarlo!

    diphda net el 21 de enero de 2015, 10:49:37

  9. Muy bueno, esta semana lo pruebo. Se me vienen algunas cuestiones:

    • Qué ocurre al cambiar las entities? Hay que regenerar? Y en este caso:
    • Es sencillo de extender en funcionalidad?

    José Ignacio el 21 de enero de 2015, 23:32:49

  10. hola Javier saludos y exitos y gracias por este trabajo que realizas, al instalar tengo un problema, los 5 pasos las realizo bien el problema que tengo es en; Crear el primer backend, parte uno podrias explicar. Me sale el siguiente error. Class 'AppBundle\Entity\Blog' does not exist

    Eusebio Panozo el 22 de enero de 2015, 7:29:26

  11. Jose Ignacio: no hace falta regenerar nada. En la configuración del bundle hay que indicar las entidades que quieres gestionar a través del mismo, así como por ejemplo los campos que se muestran en el listado... Si redefines una clase como mucho tienes que cambiar dicha configuración.

    Ignacio Giménez el 22 de enero de 2015, 11:20:29

  12. Wao, que bien!!!. He utilizado SonataAdminBundle en varios proyectos y es cierto que tiene sus ventajas y desventajas. Como desventajas creo que es un poco difícil de instalar y requiere muchas dependencias, hay que crear y configurar una clase por cada entidad que queremos administrar y también un servicio, sí bien es cierto que la documentación hay mejorado todavía hay aspectos y funcionalidades que no cuentan con ella y es un poco engorrosa para personalizar (aunque en algunos casos me he visto en la necesidad de personalizar casi al extremo y he podido, todo está en investigar bien). Como ventajas encuentro algunas como los filtros configurables, la exportación en diferentes formatos, el soporte para relaciones de todo tipo Many-to-Many, Many-to-One, One-to-Many, etc. No he probado todavía este bundle pero por lo que he leído creo que me va a gustar más que el SonataAdmin. Aunque le agradezco mucho a este último por sacarme de apuros en las ocasiones en las que el cliente me pedía un backend "rápido", "con calidad" y con "buen diseño".

    Jesús Damián García Pérez el 23 de enero de 2015, 14:09:20

  13. Esta muy bien el bundle bastante sencillo y fácil de extender que es lo más importante...Es bien rápido también, aunque falta probarlo con las entidades relacionadas a ver que tal va...Un saludo desde Cuba...

    Maikel Suárez Corrales el 23 de enero de 2015, 22:59:08

  14. Lo he probado ya con entidades Uno a Mucho y funciona perfectamente. Solo echo de menos la acción delete desde el listado de las entidades, sólo está el de editar. Muchas gracias por este gran aporte. Creo que será mi generador de backend favorito

    Giancarlo Ventura Granados el 25 de enero de 2015, 19:40:05

  15. Me ha encantado, qué gran trabajo (de nuevo) Javier! Por cierto, tienes pensado incluir filtros (o ya los has incluido y no los veo)? gracias por tus aportes

    diphda net el 26 de enero de 2015, 10:40:39

  16. Lo he probado y está muy bien... lo que estamos buscando siempre... Muchas gracias

    Roberto Pereira el 27 de enero de 2015, 0:48:29

  17. Muy bien, para mi gusto solo faltaría un formulario de filtrado por los campos de las entidades.

    Eduardo Manuel Macías Sotolongo el 29 de enero de 2015, 22:18:20

  18. Hola Javier, fijate que cuando voy a la URL /admin, Me sale el siguiente error. Class 'MiBundle\Entity\Cliente does not exist

    Rolando Canales el 24 de febrero de 2015, 6:16:11

  19. Hola Rolando, es posible que tu problema este en la ruta, seguramente tu pones:

    MiBundle\Entity\Cliente

    y tendras un directorio superior del proyecto, por ejemplo:

    Acme\MiBundle\Entity\Cliente

    Espero haberte ayudado.

    Javier, magnifico trabajo. Muchas gracias.

    Julio Cidon el 25 de febrero de 2015, 11:13:39

  20. Muy currado! Estoy intentando usarlo con el famoso FOSUserBundle, pero no consigo configurar el controlador de manera que cuando creo un nuevo usuario me codifique la contraseña en la base de datos igual que se hace desde el propio FOSUserBundle. Ademas el campo "last_login" me aparece como "Inaccesible". He intentado ponerle el Type, añadirle formato, pero sigo sin poder verlo.

    Irene Pérez Diez del Corral el 2 de marzo de 2015, 11:52:08

  21. Hola Javier, un gran trabajo, de calidad no esperaba menos de ti, pero me encontré con una duda, como puedo hacer para generar formularios dinámicamente al dar el evento change de un select, por ejemplo en el caso por ejemplo si quisiera cargar los ubigeos de un país, soy de Peru (Departamento, Provincia, Distrito), que se vayan cargando conforme vaya cambiando los select.

    Muchas gracias, sin duda un excelente trabajo y mucho más fácil que Sonata admin bundle, que este tiene un procedimiento algo complejo al cargar dinámicamente formularios, pero foreando un poco y leyendo la documentación se puede hacer, pero quisiera que en tu bundle puedas contemplar la carga dinámica de formulrarios con tu visión super sencilla e intuitiva, que en verdad a muchos nos rompe la cabeza =).

    Estoy gozoso de usarlo y compartir mis experiencias, te felicito !!!!

    Luis Alberto Sánchez Saldaña el 4 de abril de 2015, 16:23:19

  22. Gracias por este trabajo,solo una pregunta como puedo cambiar los labels y ponerle otro nombre porque me sale, por ejemplo action.list,action.show etc...

    Carlos Alberto Pimentel De la Torre el 9 de abril de 2015, 21:56:11

  23. Buenas Javier, Muchísimas gracias por este gran aporte a la comunidad. ¡ Esta muy bien ! No se porque pero no me deja sobrescribir los controladores para agregar funcionalidades nuevas. Le adjunto el codigo:

    use JavierEguiluz\Bundle\EasyAdminBundle\Controller\AdminController as EasyAdminController;

    class AdminController extends EasyAdminController { public function invitationAction() {

    }

    }

    Y me da este error: FatalErrorException: Error: Call to undefined method JavierEguiluz\Bundle\EasyAdminBundle\Controller\AdminController::invitationAction()

    Luis Matesanz Barroso el 8 de mayo de 2015, 13:14:58

  24. ¡Ya esta solucionado! Gracias.

    Luis Matesanz Barroso el 8 de mayo de 2015, 13:37:00

  25. Tiene unos problemas con safari el css http://i.imgur.com/w0hFdUv.png Barra lateral la etiqueta a no muestra, en otro navegadores si.

    Y por cierto mu bien sistema me gusto

    Roger Cruz el 11 de mayo de 2015, 7:29:59

  26. Gran trabajo Javier.

    David Amigo el 21 de mayo de 2015, 22:56:06

  27. Después de trastear con él solo echo en falta poder subir/modificar campos de imágenes. Por lo demás genial.

    Jorge Paredes Perez el 7 de agosto de 2015, 13:57:07

  28. Formidable, Javier! Y me sacas de un gran apuro en la vida real, mil gracias! Tu sabes que todos los proyectos y sobre todo para las empresas para hoy son tarde, y aunque tu genial libro junto con las "buenas practicas" me han servido como nunca antes, ahora con esta ayuda tengo el tiempo para enfocarme en temas mas inmediatos para mi cliente!! Este era nuestro sueño y... Voila!

    Nelson Sheyim Atamashi Restrepo Jurado el 16 de agosto de 2015, 19:41:15

  29. Excelente aporte! soy nuevo en symfony y este es el primer bundle que me descargo y me va de maravilla.. poco a poco lo estudiare mas para poder sacarle todo el potencial... muchas gracias

    Fernando ESpinoza el 14 de septiembre de 2015, 23:42:53

  30. Muy buen trabajo con este bundle. En cuanto a la instalacion chapó, facil y rápida. La interfaz esta muy bien. En cuanto al desarrollo sería de agradecer que fuera capaz de cargar tablas con clave primaria compuesta. Gracias por realizar este aporte a la comunidad ;)

    Sergio Martín el 3 de octubre de 2015, 2:24:10

  31. Hola, que bueno que exista esta bundle! gracias.

    Estoy utilizando JMSTranslationBundle para el manejo de traducciones. Hay alguna forma de integrarlo al easyadmin, por lo menos para el control de credenciales y el menú?

    Gracias, saludos

    Nicolas Rodriguez el 16 de diciembre de 2015, 1:34:59

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

19 de enero de 2015

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.