Programación y sistemas

Mi primer ¡Hola Mundo! con Symfony

Ayer os mostré mi pequeña odisea para instalar Symfony en WAMP o al menos el SandBox, hoy toca empezar a programar.

Sigo con el libro en español de symfony.es. En el capítulo cuarto la cosa se empieza a poner interesante, voy a empezar a enrear con Symfony jejejeje.

Bien, primero la teoría:

Symfony utiliza el sistema MVC (modelo, vista y controlador) para así poder separar la estructura de la web de los estilos y sobre todo de la lógica en php. ¿Hasta aquí todo bien?… sigamos… Para tener todo lo más organizado posible, symfony suele separar el backend del frontend (en realidad es lo normal), por ejemplo en una tienda virtual la administración (backend) está separada de la tienda que pueden ver los usuarios (frontend); pero symfony va un paso más allá, cada aplicación (backend, frontend o como quieras llamarlas) se subdivide en módulos, cada módulo puede contener una o varias páginas, es decir, la cesta de la compra de la tienda sería un módulo, el proceso de compra (identificación o registro del usuario, confirmación de los datos y los productos a comprar y el proceso de pago) sería también un módulo. Cada módulo se divide en dos partes, las acciones y las plantillas. En las acciones se guardará la lógica del módulo (las llamadas a la BD, los calculos que hubiese que realizar, etc) y en las plantillas se mostraría esa información.

Vamos con la práctica para entenderlo mejor:

En el libro indican que necesitamos abrir una cosola para poder crear el módulo (cuando me refiero a consola es a la ventana de MS-DOS de windows no que destripes la play xD). Bien vamos a ello:

Accedemos a la carpeta de nuestro proyecto, que por defecto es: C:\wamp\www\sf_sandbox y le damos la siguiente instrucción:

symfony generate:module frontend contenido

Esto significa:

symfony genera un módulo en la aplicación frontend llamada contenido.

Esto generará varias carpetas y algunos archivos. Puedes verlo accediendo a C:\wamp\www\sf_sandbox\apps\frontend\modules\contenido.

Como verás tenemos dos carpetas: actions y templates. En la carpeta actions tenemos un archivo llamado actions.class.php, aquí es donde crearemos toda la lógica del módulo; y en la carpeta templates tenemos el archivo indexSuccess.php donde está la estructura en html de nuestro módulo.

Abrimos el archivo actions.class.php. El nombre de cada acción comienza SIEMPRE (no se que tamño ponerle para que sepas que esto es importantísimo) por execute, esto es así simplemente por convección para que symfony lo entida, y poder diferenciarlo del resto de posibles funciones. Ahora mismo hay una acción creada llamada executeIndex, en realidad no nos sirve para nada y puedes borrarla o comentarla como quieras. Vamos a crear nuestra primera acción:

public function executeVer()
{
$hoy = getdate();
$this->hora = $hoy[‘hours’];
}

Esta acción nos dará la hora actual. Pero para poder mostrarla debemos crear la plantilla:

Si usas Dreamweaver, tendrás que crear una nueva página en html y borrar todo el contenido (Sí todo el html, las cabeceras y el resto de etiquetas, todo); si usas otro editor o el bloc de notas igual.

Escribimos lo siguiente en la plantilla:

<p>Hola Mundo</p>

Y guardamos la plantilla como verSuccess.php en la carpeta templates del modulo contenido, que es en el que estamos trabajando. Las plantillas se le añade el Success.php igual que el execute a las acciones, no lo olvides.

Ya podemos ejecutarlo en nuestro navegador escribe: localhost/sf_sandbox/web/frontend.php/contenido/ver y os debería aparecer vuestro «¡Hola Mundo!».

Ale, muy bonito, ¿Ya os habeís autolaureado y satisfecho vuestro ego por lo buenos que sois? ¿si? pues sigamos…

Volvemos a la plantilla verSuccess.php que acabamos de crear y escribimos lo siguiente:

<?php if ($hora >=18): ?>
<p>Quizá debería decir buenas tardes. Ya son las <?php echo $hora ?>.</p>
<?php endif; ?>

Se me olvidaba comentar algunas reglas sobre las plantillas:

  • Las etiquetas para php deben empezar por <?php y acabar por ?>.
  • No se debe escribir código html con un echo o un print, de esta manera una persona que no sepa programar podrá modificar la estructura de la plantilla sin producir destrozos.
  • Para escribir bucles sólo se debería utilizar la síntasis alternativa.
  • Las plantillas tienen acceso directo a los atributos de la acción, por eso no hace falta incluir o declararlos.
  • No darles de comer después de las 12 de la noche, no mojarlos y no debe darles la luz del sol XD.

Guarda la plantilla si no lo has hecho aún y actualiza la página en  el navegador. Si la hora es mayor o igual a 18 te aparecerá la frase sino no.

Seguimos…

Vamos a crear un formulario para ver como serían con symfony:

En la plantilla verSuccess.php añadimos lo siguiente:

<form method=»post» action=»<?php echo url_for(‘contenido/Actualizar’) ?>»>
<label for=»nombre»>¿Cómo te llamas?</label>
<input type=»text» name=»nombre» id=»nombre» value=»» />
<input type=»submit» value»Ok» />
<?php echo link_to(‘Nunca digo mi nobre’,’contenido/actualizar?nombre=anonymous’,
array(
‘class’ => ‘enlace_especial’,
‘confirm’ => ‘¿Estás seguro?’,
‘absolute’ => true
)) ?>
</form>

Varias cositas:

  • Como puedes observar el valor del atributo action del formulario lo obtenemos a través de la función url_for(), esto es un helper o ayudante. La razón estriba en que las rutas podrían modificarse en un futuro y para evitar tener que ir plantilla por plantilla haciendolo manualmente esta función nos lo hace automáticamente.
  • Además de el ayudante para la url existe otro ayudante para crear links, link_to(); esta función tiene dor parámetros obligatorios: el texto a mostrar y la ruta del link (el parametro src de la etiqueta a en html). Además tiene un parámetro de opciones optativo, utilizando un array se pueden añadir más atributos de la etiqueta a o incluso alguna función en javascript como ahora veremos.

Pero antes…

Vamos al archivo de acciones y creamos esta nueva función:

public function executeActualizar($peticion)
{
$this->nombre = $peticion->getParameter(‘nombre’);
}

Y creamos una nueva plantilla llamada actualizarSuccess.php con el siguiente contenido:

<?php if ($sf_params->has(‘nombre’)): ?>
<p>Hola, <?php echo $sf_params->get(‘nombre’) ?>!</p>
<?php else: ?>
<p>¡Hola, Juan Pérez!</p>
<?php endif; ?>

Guardamos la nueva plantilla en la carpeta templates del módulo que estamos creando y cargamos la página con dirección localhost/sf_sandbox/frontend_dev.php/contenido/ver.

¿Porqué se accede a las páginas con esa ruta? Bueno, symfony en vez de utilizar frontend_dev.php?module=contenido&action=ver usa esto que es más útil para los navegadores, aunque se puede cambiar (de ahí que sea mucho mejor utilizar helpers para las rutas).

Bien, por último comentar que existe una forma abreviada de hacer el condicional de la plantilla actualizarSuccess.php:

<p>¡Hola, <?php echo $sf_params->get(‘nombre’, ‘Juan Pérez’) ?>!</p>

Esto lo que hace es añadir un parámetro optativo a la función get() del objeto $sf_params; en el caso que el primero no exista se muestra el segundo.

Pero lanza un error y estoy esperando haber si un alma caritativa me lo pueda solucionar, hasta entonces habrá que esperar.

12 Comentarios

  • Dario 21/01/2011

    Hola Mikel, muy bueno tu artículo. Me topé con Symfony y me interesa porque estoy aprendiendo PHP para hacer un sitio dinámico.
    Veo que estuviste probando el framework y me gustaria saber si me lo puedes recomendar para desarrollar un sitio que tendra visitas masivas. Se trata de un calendario de eventos para un publico especifico, el cual lo necesita y no cuenta con esta posibilidad online.
    La consulta se reduciría a:
    – si vale el tiempo invertido en aprender a usarlo
    – si es seguro
    – si se puede modificar la plantilla, ya que trabajo con CSS pero no profundicé si se puede con hojas de estilo cambiar la apariencia

    Agradezco mucho tu atención, y un abrazo desde Buenos Aires.

    Dario

  • Mikel 22/01/2011

    Buenas Dario, antes de nada, gracias por comentar.

    Symfony es un framework no un CMS, me explico: un CMS es un sitio web completo con su administración, sus secciones, etc. y que a través de la administración creas nuevas secciones, añades contenido, etc. Symfony es una biblioteca de instrucciones para crear ese CMS o una tienda on line o cualquier proyecto que se te ocurra, pero de una forma mucho más rápida que si lo programases solo con PHP.

    Symfony utiliza el sistema de Modelo-Vista-Controlador (MVC) para crear los proyectos por tanto, se separa la lógica del diseño.

    ¿Vale el tiempo invertido en aprender a usarlo?
    Sí, sin duda. En la mayoría de proyectos que hagas con PHP siempre utilizarás las mismas funciones o clases: la que conecta con la base de datos, la que te devuelve una fecha, la que comprueba que los datos que se pasa el usuario por un formulario son correctos, etc. Symfony hace todo eso por tí y mucho más. Además que te permite modificar cualquier aspecto de symfony a través de sus archivos de configuración.

    ¿Es seguro?
    Sí, lo es. Symfony está pensado para proteger el proyectos de inyecciones SQL y ataques XSS, además que como he dicho antes Symfony comprueba los formularios sin necesidad de que tu programes nada, el se encarga de que sí un campo de un formulario es un número con diez cifras, ese campo contenga un número con diez cifras y no otra cosa, con lo que podrás mostrar al usuario un mensaje indicándole el problema.

    ¿Se puede modificar la plantilla?
    Cada vez que creas un proyecto con Symfony, este te genera una página por defecto con sus imágenes y CSS que podrás cambiar por el diseño del sitio que quieras crear, por tanto sí, se puede.

    Ahora bien, y disculpame si he sido un poco condescendiente al responderte, (tal vez, ya conozcas alguna de las cosas que te comento) pero si estás empezando con PHP lo ideal es que conozcas primero PHP antes de meterte con Symfony, por que, aunque Symfony es una herramienta estupenda, no lo hace todo, en tus proyectos tendrás que programar la lógica de cada una de las secciones, además debes conocer PHP5, más concretamente el funcionamiento de las clases, las palabras reservadas, etc.

    Espero que esto te haya resuelto tus dudas,

    Un saludo

  • Dario 22/01/2011

    Excelente tu respuesta. Muchas gracias por tu claridad.
    voy a terminar mi curso de PHP y luego me meto con Symfony.

    abrazo

  • alex 29/01/2011

    tengo el siguiente error en el archivo verSuccess despues de agregar el codigo :
    =18): ?>
    Quiza deberia decir buenas tardes.ya son las .

    Notice: Undefined variable: hora in C:\wamp\www\sf_sandbox\apps\frontend\modules\contenido\templates\verSuccess.php on line 1

  • alex 29/01/2011

    =18): ?>
    Quiza deberia decir buenas tardes.ya son las .

    este es el codigo

  • alex 29/01/2011

    no me deja agregar el cosigo =S

  • Mikel 29/01/2011

    WordPress no permite que los usuarios escriban código html en los comentarios. Por eso no te deja.

    Revisa el código por te esta dando un error en una variable que no está declarada, comprueba que está bien escrita.

  • Martin 22/03/2011

    Excelente articulo Mike, instale NetBeans y me tope con ese framework y dps de leer este articulo y la respuesta que le diste a dario se me aclararon las cosas del «Para que sirve».. Un abrazo!

  • Pedro 11/04/2011

    Muchas gracias por el artículo, me ha parecido muy instructivo.

    Saludos

  • Ezequiel 28/02/2012

    Me podrias pasar el libro en formato PDF porfiss!,,soy estudiante y no tengo dinero para comprarlo!,,

  • Cyn 09/04/2012

    Gracias Mikel por tu claridad para explicar todo y por tu tiempo, me fue de mucha ayuda el «hola mundo»… tenés idea si existe un CMS ya hecho con Symfony?

  • Leo 29/07/2012

    Muy bueno gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre más desde Interadictos

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo