Cupon, una nueva aplicación de ejemplo de Symfony2

La mejor forma de aprender a programar con Symfony2 es jugar con una aplicación real ya desarrollada. A pesar de su reciente lanzamiento, ya existen varias de estas aplicaciones:

  • Desymfony, desarrollada por los ponentes de las Jornadas Symfony 2011, y que se trata del sitio web ficticio de las propias jornadas. Esta aplicación es tan sencilla, que seguramente es la mejor para los que están empezando con Symfony2 y no saben nada todavía.
  • LiveChat, desarrollada por ServerGrove, que es una aplicación para añadir a tu sitio web chats en tiempo real para dar soporte técnico y comercial a los visitantes del sitio. Esta es probablemente la mejor y más completa aplicación disponible actualmente.
  • KnpIpsum, desarrollada por KnpLabs, que no es exactamente una aplicación completa de ejemplo sino un tutorial compuesto por varios pequeños ejemplos prácticos relacionados.
  • Lichess, desarrollada por Thibault Duplessis, que es una aplicación que actúa de servidor de juegos de ajedrez. Soporta cientos de partidas simultáneas y permite jugar a dos jugadores entre sí o contra la máquina, mediante un sistema de inteligencia artificial.
  • Symfony2Bundles, desarrollada por KnpLabs, y que es el código fuente del sitio symfony2bundles.org
  • symblog, desarrollado por un programador que se hace llamar dsyph3r, y que es una aplicación + tutorial que muestra cómo crear un blog completo con Symfony2

A todas estas aplicaciones se suma a partir de hoy la aplicación Cupon. Se trata de una aplicación de ejemplo desarrollada con Symfony2 e inspirada en el sitio web Groupon, de ahí el nombre. Esta aplicación es la base que estoy utilizando para escribir el libro sobre programación con Symfony2 que publicaré próximamente.

La aplicación es bastante completa, ya que además de cubrir todos los conceptos básicos sobre Symfony2:

  • Hace un uso avanzado del sistema de seguridad, incluyendo el uso de una ACL
  • Configura varios servicios mediante el contenedor de inyección de dependencias
  • Define tres áreas diferentes en la aplicación: frontend, extranet y backend
  • Define unas fixtures bastante avanzadas
  • Hace un uso extensivo de formularios
  • Define entidades complejas con varios mecanismos de validación diferentes
  • Incluye algunos test unitarios y funcionales de prueba
  • Muestra un ejemplo de cómo internacionalizar la aplicación
  • Cuida el rendimiento de la aplicación mediante la caché de HTTP y ESI

Si quieres probarla, sigue las instrucciones de instalación que encontrarás en el propio repositorio de la aplicación. Si sólo quieres echar un vistazo al código, accede a su repositorio oficial: https://github.com/javiereguiluz/Cupon Y si te gusta, no te olvides pinchar en el botón de Watchers de github, así podré saber a cuánta gente le interesa la aplicación.

Comentarios

  1. Tiene muy buena pinta. Excelente idea. Estoy deseando de ver ese libro publicado. ¡Gracias Javier!

    Raúl el 3 de octubre de 2011 17:48:46

  2. También ansioso por ver el libro! Muchas gracias por tu aporte. Saludos.

    Sergio el 3 de octubre de 2011 19:43:23

  3. Me alegro que hayas vuelto Javier con publicaciones en el blog. Muy interesante y espero ver el libro pronto.

    Juan Ardissone el 3 de octubre de 2011 22:37:39

  4. Excelente! Qué ganas de leer el libro y a ver si se convierte en la referencia de aprendizaje de sf2 que necesitamos!

    Nacho el 3 de octubre de 2011 22:59:11

  5. Enhorabuena Javier, estoy deseando de que salga en libro, :). Sólo por curiosidad, ¿iniciativa propia o encargo de Sensio Labs?

    Javier López el 3 de octubre de 2011 23:02:02

  6. @Javier, por iniciativa propia :)

    Javier Eguiluz el 4 de octubre de 2011 07:23:08

  7. Perfecto! Enhorabuena Javier!

    Solo añadir de tu lista Symblog : https://github.com/dsyph3r/symblog (con su tutorial : http://tutorial.symblog.co.uk/) Todas estas aplicaciones son super importantes para el crecimiento de la communidad; yo creo que fue gracias a Askeet, Jobeet y el Admin Geneator que symfony 1.X fue tan popular! Como sensio no tiene pensado hacerlo para Symfony 2, bienvenidas sean esas iniciativas! :)

    Gracias!

    Kevin el 4 de octubre de 2011 08:41:28

  8. Gracias por el código Javier, ahora a esperar el libro que caerá en mis manos, si o si :)

    Juan Carlos Romero el 4 de octubre de 2011 09:19:31

  9. Que grande! Muchas gracias por el post. Aquí tienes un lector seguro de ese próximo libro. Suerte con él y que podamos tenerlo lo más pronto posible entre las manos :)

    Raul Leal el 4 de octubre de 2011 11:53:38

  10. En Castellón me pareciste un CRACK, y este tipo de cosas las corrobora. ¿Para cuando el libro? ¿Físico, electrónico o ambos? ¿Habrá tutorial para Navidad tipo Jobeet?

    Chechu 71 el 4 de octubre de 2011 12:02:49

  11. @Chechu muchas gracias por lo que dices :)

    El libro se publicará en papel y en electrónico. Sobre el tutorial de Navidad, si lo dices por mi, no tengo pensado hacerlo. Si lo dices por el sitio web oficial y Fabien y compañía, pues no he oído nada al respecto :(

    Javier Eguiluz el 4 de octubre de 2011 12:12:57

  12. No sé de dónde sacas el tiempo para todo esto, pero chapeau! Me voy a tener que leer tu libro sobre productividad definitivamente :)

    Enhorabuena por la aplicación Cupon, la temática es un gran acierto. La tengo que probar, ya te contare!

    Marcos Labad el 4 de octubre de 2011 13:40:42

  13. Hola javier, en hora buena por la aplicación.

    Estoy realizando todo lo que pones en la ayuda para instalar la aplicación y cuando intento limpiar la caché obtengo el siguiente error.

    [Symfony\Component\DependencyInjection\Exception\InactiveScopeException]
    You cannot create a service ("request") of an inactive scope ("request").

    Cual pudiera ser el problema

    Saludos y gracias desde ya.

    Luis Enrique el 4 de octubre de 2011 16:05:28

  14. Luis Enrique, con la información que me das no sabría decirte cuál es el problema. Si puedes, prueba a borrar la cache a mano, destruyendo todos los archivos y carpetas que haya dentro del directorio app/cache. Luego pon los permisos bien y vuelve a ejecutar la aplicación a ver si se te crea bien la cache.

    Javier Eguiluz el 4 de octubre de 2011 21:55:46

  15. Yo sigo programando con Sf 1.4 porque me parece un framework genial y muy bien documentado que ahora mismo colma todas mis necesidades. De todas maneras estoy interesado en probar los avances de Sf2, a pesar de que he oído que es tan distinto del 1. Aprender Sf2 es programar en un nuevo paradigma más avanzado. Gracias a todos.

    David el 5 de octubre de 2011 11:39:10

  16. Muxas gracias !! por la informacion,

    jhon el 5 de octubre de 2011 14:25:29

  17. A propósito, ¿hay fecha prevista de publicación? ¿Dónde se podrá conseguir? La transición del 1.4 a 2 es más compleja de lo previsto, y seguro que esta guía nos va a ayudar a más de uno. Impaciente estoy...

    Chechu 71 el 7 de octubre de 2011 10:28:28

  18. Chechu71, no me atrevo a dar una fecha sobre su posible publicación porque estas cosas se pueden retrasar fácilmente.

    Lo que sí que puedo decir es que estoy trabajando en el libro día y noche y quiero publicarlo lo antes posible :)

    Javier Eguiluz el 7 de octubre de 2011 14:08:24

  19. Gracias la verdad ! estas son las cosas por la que el Software Libre tiene futuro ;). Crack, A esperar el Libro !

    Michel el 8 de octubre de 2011 00:52:49

  20. hola javier

    mira segui todos los pasos en la instalacion de tu aplicativo pero al ejecutar la linea

    php app/console assetic:dump --env=prod --no-debug

    me sale el siguiente error

    Call to undefined function Doctrine\Common\Cache\apc_fetch() in /Applications/MAMP/htdocs/Cupon/vendor/doctrine-common/lib/Doctrine/Common/Cache/ApcCache.php on line 60

    podrias ayudarme por favor a solucionar este error

    gracias, y sigue adelante...

    svycar el 11 de octubre de 2011 15:43:30

  21. El error seguramente se produce porque no tienes instalado APC en el ordenador en el que estás probando la aplicación.

    El punto 7 de las instrucciones de instalación indica que APC debe estar instalado para probar la aplicación en producción.

    Si no puedes instalar APC en ese equipo, simplemente no pruebes la aplicación en producción :)

    Javier Eguiluz el 11 de octubre de 2011 16:14:11

  22. Hola a todos: agradecería enormemente si alguien me explicara como trabajar con el bundle para la conexión con Ldap de opensky o si tienen una aplicación de ejemplo que contenga este tipo de autenticación, pues llevo rato trabajando de hacer una aplicación que se autentique con ldap y no he conseguido nada.

    gracias de antemano

    Takechi el 14 de octubre de 2011 21:30:20

  23. Genial esto.

    Espero que sea en español, por que ando bastante pez, y la mayoría de doc que encuentro es en inglés o doc mal traducida.

    Bien bien, esto tiene buena pinta! :)

    Oriol el 17 de octubre de 2011 10:53:49

  24. Hola a todos. Necesito ayuda. Hay alguna manera de bajar los ejemplos de Symfony2 que no sea por la via del github? Desde mi pais, CUBA, no he encontrado la manera de conectarme con ese sitio. Gracias

    Carlos Luque el 18 de octubre de 2011 13:20:56

  25. Me sucede igual que a Carlos Luque. Estoy empezando a programar utilizando un framework en PHP y me decidí por Symfony porque parece ser el mejor y más documentado que existe, además, que gracias a Javier Eguliuz podemos contar con gran parte de esta documentación debidamente traducida al español (para los que no nos llevamos muy bien con el inglés). Descargué gran cantidad de libros y tutoriales, pero al querer probar las aplicaciones reales desarrolladas con el nuevo framework Symfony2, me dió error las tareas de clonación y o actualización que ejecuta git para descargar las librerias y clases. Me di cuenta que el error se debe a que el git necesita autenticación para poder acceder al repositorio del código ya que utilizo un proxy para acceder a internet. No sé si se pueda configuar el git para declararles mis credenciales del proxy o si se puedan descargar los paquetes completos de las aplicaciones de ejemplos. Gracias de antemano por la ayuda y esperaré con ansias el libro de Javier. Saludos desde Cuba.

    Novadaemon el 18 de octubre de 2011 21:50:45

  26. hola javier

    mira segui todos los pasos en la instalacion de tu aplicativo pero al ejecutar la linea

    php app/console assetic:dump –env=prod –no-debug

    me sale el siguiente error

    Call to undefined function Doctrine\Common\Cache\apc_fetch() in /Applications/MAMP/htdocs/Cupon/vendor/doctrine-common/lib/Doctrine/Common/Cache/ApcCache.php on line 60

    pero ya active la extension php_apc utilizo wamp

    saludos,

    Percy Ameri

    Percy el 20 de octubre de 2011 19:41:26

  27. esto me sale cuando instale symfony2

    Welcome! Welcome to your new Symfony project. This script will guide you through the basic configuration of your project. You can also do the same by editing the ‘app/config/parameters.ini’ file directly. Configure your Symfony Application online Bypass configuration and go to the Welcome page Re-check configuration

    Percy el 20 de octubre de 2011 19:48:27

  28. @Percy, el primer error que comentas es porque no tienes APC bien instalado y/o bien configurado.

    @Percy, lo segundo que comentas es correcto cuando instalas Symfoyn2. Pero te recomiendo que sigas al pie de la letra las instrucciones de instalación de la aplicación.

    Javier Eguiluz el 23 de octubre de 2011 17:29:51

  29. WOWWWW que proyecto!, gracias Javier, lo acabo de probar, muy buen proyecto. De aquí voy a poder obtener muchos tips para mi proyecto. Y ansioso estoy por ver el libro publicado.

    Saludos!

    Nicolas el 31 de octubre de 2011 23:36:28

  30. Que proyectazo !!

    La verdad es que desde que estuve en Castellón me dejaste bastante impresionado con tus conferencias y me uno al comentario generalizado de que eres un crack !

    Ahora vas a sacar un libro (espero en español ;)) sobre Sf2...deseando estoy!!!

    Muchas gracias Javier.

    Paco el 1 de noviembre de 2011 19:38:58

  31. @Paco, muchas gracias por lo que dices :) En efecto el libro es en español. Aquí puedes ver un pantallazo de cómo va la cosa:

    http://twitter.com/#!/javiereguiluz/status/129874259496550400/photo/1

    Javier Eguiluz el 1 de noviembre de 2011 19:51:49

  32. @Javier que precio mas o menos tendra el Libro? :( Hay personas pobres :D LOL que no podemos adquirirlo asi querramos

    ReynierPM el 8 de noviembre de 2011 19:56:50

  33. Hola alguien me puede ayudar con un ejemplo utilizando ajax

    gracias....

    svycar el 1 de diciembre de 2011 01:38:12

  34. Buenas, primero gracias por el libro, lo he comprado y lo esty leyendo. De todas maneras queria hacerles una consulta...

    deseo correr la aplicacion Cupon y no logro crear el esquema de la base de datos ya que al hacer "php bin/vendors install" me da un error fatal al leer la linea 34 del appkernell.php (Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle). Me marca que no existe el directorio o algo asi. Dado a este error fatal no me deja crear el esquema de la db.

    Tengo

    Symfony 2.0.8 (Todo instalado, ningun error en la pagina de bienvenida.) PHP 5.3.8 (Apache + MySQL)

    lo unico al hacer desde git "ssh git@github.com" me da un error de "permiso denegado" (publickey)

    Quisiera saber si alguien puede decirme como proceder ya que estoy arrancando con symfony.

    Muchas gracias !!!

    Juan Manuel el 20 de enero de 2012 05:36:34

  35. Juan Manuel, los errores de github + SSH desafortunadamente son bastante comunes. En la sección de documentación de Github tienen un documento que recoge todos los problemas habituales con SSH y su solución: http://help.github.com/ssh-issues/

    Es posible que lo que comentas sea el segundo caso (Permission denied (publickey)) así que ya ves que sólo tienes que generar tus claves SSH y subirlas después de github.

    Javier Eguiluz el 20 de enero de 2012 08:35:51

  36. Javier, muchas gracias por la respuesta. He podido llegar bastante lejos, solucione los inconvenientes. De todas maneras he quedado trabado a la hora de crear el esquema de base de datos porque me dice que mysql agoto su tiempo. Error de conexion. Ahora voy a revisar el link en github/issues... Muchas gracias

    Juan Manuel el 20 de enero de 2012 17:56:33

  37. Buenas, Javier. Muchas gracias y enhorabuena por tu trabajo. En mi trabajo hemos comprado tu libro (versión-e) para iniciarnos en Symfony, y estamos utilizándolo como tutorial. Mi pregunta es si no podrías facilitar un dump de la BD de prueba, para evitar tener que lidiar con bastantes problemas que se dan al usar los Fixtures (en mi caso, en el de usuarios, sobre todo) Gracias.

    Carlos el 9 de marzo de 2012 17:14:18

  38. Carlos, muchas gracias por comprar el libro. Respecto a lo que comentas, ¿has visto las dos variantes de fixtures que existen? Hace unas semanas modifiqué las instrucciones de instalación en https://github.com/javiereguiluz/Cupon

    Ahora hay dos fixtures, uno de ellos es básico y creo que es lo que estas buscando ahora mismo.

    Javier Eguiluz el 9 de marzo de 2012 17:42:25

  39. Hola de nuevo, Javier. Pues el fixture básico me falla cuando llega a las ofertas. Cuando cargo los fixtures, no crea nada en la BD. He probado a comentar el bloque que crea las ofertas y las ventas (porque están relacionadas con las primeras) y entonces me crea bien las ciudades, las tiendas y los usuarios. Después descomento sólo el bloque de las ofertas y entonces no sólo no las crea, sino que elimina los datos de las tablas anteriores (ciudades, tiendas y usuarios). No sé qué hacer...

    Carlos el 13 de marzo de 2012 09:58:38

  40. No logro pasar de aqui: ubuntu 11.11

    Notebook-PC:/var/www/cupon$ phpunit -c app PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39

    ¿Puedes ayudarme con este problema?

    Pedro el 9 de abril de 2012 19:11:58

  41. Pedro, ¿qué versión de PHPUnit utilizas? y sobre todo, ¿cómo lo has instalado?

    Según me han contado, en algunas distribuciones de Linux da problemas instalar PHPUnit como paquete. Mejor instalarlo mediante PEAR:

    $ pear config-set auto_discover 1 $ pear install pear.phpunit.de/PHPUnit

    Javier Eguiluz el 9 de abril de 2012 21:59:06

  42. Trabajo con Wamp (con la versión php 5.3.4) y me da el siguiente error php_ming.dll unvalid win32 extension

    diego poole el 22 de julio de 2012 16:51:58

  43. He comprado el libro de Javier, estoy intentando instalar la aplicación Cupon, pero no consigo instalarla bien porque cuando ejecuto install vendors me dice que php_ming.dll no es válida para win32. Uso php 5.3.4

    diego poole el 22 de julio de 2012 16:54:32

  44. @Diego, desactiva la extensión php_ming.dll en tu archivo de configuración php.ini. Y no olvides tampoco ejecutar el script check.php para que Symfony te diga todo lo que tienes que activar o desactivar o modificar para poder ejecutar bien Symfony2.

    Y si sigues teniendo problemas para instalar la aplicación, es mejor que los reportes aquí: https://github.com/javiereguiluz/cupon/issues

    Javier Eguiluz el 22 de julio de 2012 17:08:58

  45. hola, disculpe no hay un foro o seccion especifica de preguntas sobre su aplicacion? es que estoy siguiendo los pasos del libro y me encontre con el siguiente error :

    Item "nombre" for "" does not exist in OfertaBundle:Default:portada.html.twig at line 22 500 Internal Server Error - Twig_Error_Runtime

    y aunque ya volvi a hacer todo desde 0 me sigue saliendo con la primera plantilla de la portada de cupon

    Javier Robles el 7 de diciembre de 2012 09:40:57

  46. Hola Javier. Compré tu libro y tengo un problema para hacer funcionar a Cupon para Symfony 2.3, ya que cuando ingreso a http://cupon.local/app_dev.php la página esta en blanco. Seguí todos los pasos de Instalación y Uso como indicas en el libro y en el repositorio de Github. Uso Ubuntu 12.04, php 5.4, apache 2.2.22 y mysql 5.5.35. Mi VirtualHost es: ServerName cupon.local ServerAlias www.cupon.local

    DocumentRoot "/home/juan/Proyectos/cupon/web"
    DirectoryIndex app.php
    
    <Directory "/home/juan/Proyectos/cupon/web">
        AllowOverride None
    Allow from All
    
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
    
    CustomLog  /var/log/apache2/cupon.local-access.log combined
    
    KeepAlive            On
    MaxKeepAliveRequests 200
    KeepAliveTimeout     5
    
    AddOutputFilterByType DEFLATE text/css text/plain text/html application/xhtml+xml text/xml application/xml
    
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    
        ExpiresActive On
        ExpiresDefault "now plus 1 week"
        ExpiresByType image/x-icon "now plus 1 month"
        ExpiresByType image/gif    "now plus 1 month"
        ExpiresByType image/png    "now plus 1 month"
        ExpiresByType image/jpeg   "now plus 1 month"
    </IfModule>
    

    Cuando ejecuto php app/check.php esta todo OK y el archivo de log no me indica si hay un error.

    Juan el 15 de marzo de 2014 18:19:04

  47. @Juan, eso es problema de permisos, fijate más adelante en el libro o en este enlace: http://symfony.com/doc/current/book/installation.html (sección: Setting up Permissions) ahí te dice como configurarlos para linux. saludos

    Diego Almirón el 28 de marzo de 2014 04:37:37

Publicada el

3 de octubre de 2011

Etiquetas

Síguenos en Twitter para acceder a más noticias.