Skip to content

Disección de una aplicación Symfony – Paso 2

En la pasada publicación les mostré el resultado final. Es hora de ir paso a paso a ver como llegamos al mismo. Antes de seguir pongamos en claro que cosas asume este blog:

  • El lector es un desarrollador con experiencia (preferentemente en PHP). Estos no son publicaciones sobre PHP sino sobre Symfony.
  • El lector ya ha leído y sabe cómo configurar Symfony localmente para realizar sus proyectos. Tengo pensado aportar algo para los recién iniciados sobre ejemplos de configuración en servidores de producción (hostings externos), sobre detalles que me han dado algún dolor de cabeza, pero no hablaremos de eso ahora. Asumimos que el APACHE funciona y esta configurado bien.
  • El desarrollo fue sobre Windows 7 o sea que los comandos y explicaciones pueden migrarse a la plataforma que más les guste.

El proyecto, la aplicación y el primer módulo

Lo primero fue crear el proyecto para eso cree un directorio con el nombre de la aplicación, luego me posicioné dentro de dicho directorio y ejecuté el comando de creación de proyectos desde la consola.

Una vez hecho esto, lo que hacemos es crear una aplicación frontend desde la consola con el siguiente comando (posicionado en el directorio del proyecto).

symfony generate:app frontend

En este punto si fueramos al navegador deberíamos ver la pantalla por defecto de Symfony.

En este punto lo que normalmente hacemos es, crear un módulo por defecto nuestro (al cual llamaremos home en este caso). Luego agregaré código en el main.css (para darle un mejor estilo a mi página de inicio) y obviamente retocaré la página layout.php para que luzca como yo quiero.

Para lograr que todo esto funcione veamos todos los archivos que modificamos. Primero creamos el módulo desde la línea de comando:

symfony generate:module frontend home

Luego modificamos la configuración de las rutas para que apunten a nuestro nuevo módulo.

#/apps/frontend/config/routing.yml
homepage:
url: /
param: { module: home, action: index }

Modificamos también el view.yml para agregar el título de la aplicación, especificar el CSS que vamos a usar en caso que cambiemos el por defecto y configuramos la codificación del idioma de la página.

#/apps/frontend/config/view.yml
metas:
title: Pending tasks
description: Web app for managing tasks
keywords: task todo
language: en
#robots: index, follow 

stylesheets: [main.css]

Una vez hecho esto, generalmente hacemos los arreglos en el layout.php genérico y agregamos el código css. Posteriormente, no debemos olvidarnos de quitar la siguiente línea del actions.class.php (dejando la línea vacía), del módulo recién creado.

#/apps/frontend/modules/home/actions/actions.class.php
public function executeIndex(sfWebRequest $request)
{
$this->forward(‘default’, ‘module’);
}

Hasta este punto (si no nos olvidamos de nada), deberíamos lograr llegar a algo como esto:

Bueno por esta vez es todo, en la próxima analizaremos el modelo de datos para la aplicación en cuestión.

NOTA DEL AUTOR: Pido disculpas a los lectores ya que la aplicación que estamos viendo está en inglés, esto es porque la utilicé para otros propósitos en los que necesitaba que estuviera en dicho idioma. Sin embargo, toda la explicación seguirá siendo en español.

 

Anuncios

Disección de una aplicación Symfony – Paso 1

Lo que vamos a hacer es ir viendo una aplicación sencilla (que no sea un blog, lo prometo), paso por paso para entender como funciona.

La idea en este caso va a ser trabajar sobre la aplicación de seguimiento de tareas desarrollada por la gente de 37Signals. Uno de los directores de dicha empresa es David Heinemeier Hansson (el creador del framework Ruby on Rails).

La clasica aplicación denominada Todo List en inglés, resulta ser sumamente educativa ya que involucra muchas características que a veces no están explicadas a fondo en la documentación de Symfony y resultan sumamente complejas para el principiante.

Para que se vayan familiarizando con el resultado final les añado aquí un video de la aplicación realizada. Aún no la he levantado en ningún servidor de hosting pero lo haré en próximas ediciones. Igualmente el objetivo de estas publicaciones de “disección” será ir paso a paso sobre la realización de esta aplicación para que puedan ir viendo ejemplos del uso de las diferentes virtudes que brinda Symfony.

Aquí les adjunto el video del producto para que puedan ver el resultado final.

Todo list application in Syfmony from Wilman Arambillete on Vimeo.

Por qué Symfony

Bien, es una buena pregunta. Pero antes deberíamos saber qué es Symfony. Ok, Symfony es un framework para el desarrollo de aplicaciones web basado en lenguaje PHP.

Hace ya tiempo que PHP se ha impuesto como lenguaje para el desarrollo de aplicaciones web. Y no es de extrañarse, a pesar de las diferentes opciones que existen en el mercado para programar sitios web, lógicamente todo se fue decantando en la opción más fácil, rápida, con mayor documentación y mayor facilidad de implantación.

PHP es un lenguaje versátil, muy fácil, no tipado y soportado por la mayoría de los servidores que ofrecen hosting. Este ultimo detalle es algo que entre los desarrolladores freelance (principal objetivo de PHP), tiene un peso brutal. Al desarrollador freelance le sirve tener algo que le permita desarrollar rápidamente, reutilizar lo programado, entregar y configurar fácilmente el producto terminado y tener pocas llamadas por actualización o cambio de código luego de vender el producto.

Y PHP en cierta medida cumple con todos los requisitos. Sin embargo, el único punto en el que resulta débil es en que así como sucede con el clásico Visual Basic 6 o el antiguo Clipper o DBASE, el hecho de que cualquier pueda programar, basta con que no se aplique un poco de conocimiento real de “orden” en el diseño para lograr un código “ilegible”. En inglés esto se denomina “spaghetti code” y se refiere a que en PHP es muy fácil caer en la tentación de no separar claramente las capas de presentación, de la de negocio, de la de datos y entreverar todo de forma tal que el código resultante sea literalmente un “asco”.

Hay que ser extremadamente prolijo y metódico para, ante algún cambio rápido que haya que hacer en algún programa, no se agreguen “parches” y código spaghetti.

Las opciones que existían hasta el momento, que de hecho más de uno las practicamos, era crearse una serie de herramientas o generadores caseros para automatizar la mayoría de las tareas triviales como generar clases, brokers, etc.
Este tipo de herramientas (ya sea propias o de terceros), resultaba en un problema a la hora de actualizar errores encontrados (ya que no eran perfectas ni estaban “super” probadas) y/o corrian el riesgo de desaparecer o cambiar (en el caso de ser de terceros).

Por lo tanto, el uso de las mismas + disciplina y metodología fueron la solución durante años.

Hace un tiempo con toda la movida de web2.0 apareció un nuevo concepto en desarrollo de aplicaciones. El uso de los llamados FRAMEWORKS basados en MVC. Ustedes dirán, “no se inventó nada nuevo”. Sí, es cierto, pero también es cierto que nadie se había sentado a hacer un framework como sucede con Struts o Spring en Java. Y realmente era lo que hacía falta. Entonces apareció RoR , el framework que lo cambió todo. Un framework para desarrollo de aplicaciones web muy interesante. Para aquellos que no saben aún, un framework es una plataforma de trabajo. Es decir, un conjunto de herramientas que permiten desarrollar sobre un modelo común. Es como programar siguiendo pautas para lograr un producto estándar y sobre todo, fácilmente modificable y mantenible.

Los frameworks se encargan de generar el código para la persistencia y el mapeo de clases a tablas (ORM). También algunos tienen herramientas para la traducción de sitios siguiendo estándares XLIFF (como es caso de Symfony). Permiten actualizar el modelo fácilmente, poseen herramientas de ayuda para interactuar con el la presentación HTML más fácilmente. Brindan herramientas de depuración de datos, etc.

La idea de este blog es introducirse en el mundo de PHP a través de Symfony. Es un proceso lento pero seguro. Este blog no es uno de esos blogs que toman un tutorial ya hecho del sitio de Symfony y lo copian. En caso que haya tutoriales serán ejemplos propios y de hecho mi idea es registrar para compartir, mi mismo proceso de aprendizaje. Ya que de hecho todos nos chocamos en condiciones normales, con las mismas dudas y problemas. Y a veces los foros no son suficientes o la documentación no está del todo completa.

No los aburro más, bienvenidos!

Un pequeño consejo, conviene saber PHP (la sintaxis y lo mínimo para poder sacarle mayor provecho a este blog). La documentación de PHP en su sitio es muy buena.