sábado, 8 de junio de 2013

Primer bundle


Se creará un bundle para cada función desacoplada del sistema para esto se comenzará con un bundle llamado MainBundle en el que irán todos los atributos comunes el sistema, luego se agregarán BlogBundle, ShoppingBundle, etc. que le darán funciones extendidas al sistema.

Para crear el primer bundle se ejecuta el comando:

php app/console generate:bundle



el cuál ejecuta una consola interactiva para la creación de bundles e iremos respondiendo una a una las preguntas:

Bundle namespace: Petramas/MainBundle
Bundle name [PetramasMainBundle]:
Target directory [/home/joerobles/NetBeansProjects/petramas/src]:
Configuration format (yml, xml, php, or annotation): annotation
Do you want to generate the whole directory structure [no]? yes
Do you confirm generation [yes]?
Confirm automatic update of your Kernel [yes]? 
Confirm automatic update of the Routing [yes]?

ya se puede acceder al bundle creado en la ruta:

http://local.petramas.com/app_dev.php/hello/Joe

y mostrará como contenido:

Hello Joe!

hemos creado las bases, el esqueleto de todo nuestro proyecto ahora toca modificar lo ya creado para darle la funcionalidad adecuada.

Para modificar la ruta de acceso a este controlador se modificará la ruta por la que se accede:

nano src/Petramas/MainBundle/Controller/DefaultController.php

<?php

namespace Petramas\MainBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller
{
    /**
     * @Route("/hello/{name}")
     * @Template()
     */
    public function indexAction($name)
    {
        return array('name' => $name);
    }
}

La ruta se cambia modificando las anotaciones y se elimina la variable a pasar al controlador:

nano src/Petramas/MainBundle/Controller/DefaultController.php <?php

namespace Petramas\MainBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller
{
    /**
     * @Route("/")
     * @Template()
     */
    public function indexAction()
    {
        return array();
    }
}

y se hace lo propio en la plantilla twig:

nano src/Petramas/MainBundle/Resources/views/Default/index.html.twig

Hello {{ name }}!

eliminando la variable pasada por el controlador name:

nano src/Petramas/MainBundle/Resources/views/Default/index.html.twig

Hello!

Y ya tenemos nuestra primera página limpia.