Una vez tenemos instalado Symfony2 en nuestro servidor (algo sencillo como vimos en el capítulo anterior) vamos a comenzar a trabajar.
(i) En primer lugar tenemos que crear un bundle, que básicamente es la semilla de nuestra aplicación, el germen de lo que vamos a construir.
php app/console generate:bundle --namespace=Acme/HelloBundle --format=yml
Básicamente le estamos indicando a Symfony2, crea un Bundle, cuyo formato es yml y al que le vamos a dar el nombre de Hello (HelloBundle en terminología Symfony2) dentro del entorno Acme.
(ii) Vamos a crear el clásico "Hola Mundo" que todo hijo de vecino crea cuando está aprendiendo un nuevo lenguaje de programación. Para ello iremos al fichero /app/config/routing.yml dentro de nuestra aplicación:
- hola:
- pattern: /hola/{name}
- defaults: { _controller: AcmeHelloBundle:Hello:index }
Aquí hay que llevar especial cuidado en no meter tabuladores en lugar de espacios, ya que Symfony lo detectará como un error y podemos volvernos locos buscando qué es lo que hemos hecho mal.
Un pequeño truco es usar un default, un valor por defecto para {name}. De esta forma estamos creando también una página para el "root" o directorio raíz:
- hola:
- pattern: /hola/
- defaults: { _controller: AcmeHelloBundle:Hello:index , name:Mundo}
El default es "name:Mundo", separado por una coma.
Si intentamos ahora mismo acceder a nuestro servidor recibiremos un error muy específico y claro: nos falta un controlador.
localhost/DIRECTORIO-SYMFONY2/web/app_dev.php/hola/mundo
(iii) Nada más sencillo de solucionar. Creamos un fichero que se llamará, teniendo en cuenta cómo hemos llamado el Bundle, de la siguiente forma:
// src/Acme/HelloBundle/Controller/HelloController.php
namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloController{
public function indexAction($name) {
return new Response('<html><body>Hello '.$name.'!</body></html>');
}
}
Dentro de HelloController.php hay dos declaraciones fundamentales, la clase HelloController, en la linea 4: class HelloController{
y la función indexAction, una línea más abajo. A esta función hemos hecho referencia desde el routing.yml, justamente en la linea que habla del controller:
En realidad le estamos dando la ruta al Bundle, AcmeHello, y al Action que vamos a ejecutar: index. Ambos, Bundle y Action llevarán el postfijo después de su nombre, es decir, AcmeHelloBundle e indexAction. Si por ejemplo el action se llamara NuevoCliente, la función en el controller se llamaría NuevoClienteAction, y haríamos referencia a ella desde el fichero yml (pronunciado "YAMEL") de esta forma: