sf2 pr5 mi primer proyecto

28
 ...UN PRIMER PROYECTO EN SYMFONY2 ...UN PRIMER PROYECTO EN SYMFONY2 - PR5 CÉSAR HERNÁNDEZ SYMFONY2 PRIMER PROYECTO EN SYMFONY2 PR5 [email protected] Version 0003-12-11

Upload: cesar-hernandez

Post on 14-Jun-2015

7.418 views

Category:

Entertainment & Humor


7 download

DESCRIPTION

Una aplicacion sencilla para conocer el ambiente de trabajo de Symfony2

TRANSCRIPT

Page 1: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CÉSAR HERNÁNDEZ

SYMFONY2PRIMER PROYECTO EN SYMFONY2 PR5

[email protected]

Version 00031211

Page 2: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Resumen (Abstract):Este  papel  de  trabajo,  en  formato  de  presentación, tiene como objetivos: aclarar un poco “algo acerca la teoria de sistemas” utilizada en Symfony2Symfony2; y; y crear un proyecto  sencillo  que  adiestre  al  nuevo  programador acerca de esta versión del framework de symfony.

Para hacer referencia a Symfony2 se utilizara el acronimo Sf2.

Palabras Claves: framework, symfony, symfony2, sf2, bundle, php, PR5

Page 3: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

ANTES DE COMENZAR CON SYMFONY2Su sistema operativo debe cumplir con los siguientes requerimientos basicos

 Apache   (es un servidor web)  Puede utilizar el Apache o cualquier otro servidor web de su preferencia que soporte PHP

 PHP 5.3.x   (lenguaje de programación) Versiones anteriores de PHP no contienen algunas funciones que son utilizadas Symfony2

 GIT   (Es un sistema de control de versiones)      El GIT es necesario para descargar la “última versión” y la “mas actualizada” de Symfony2 

 MySQL   (Es un servidor de base de datos)      Es requerido para el ejemplo a desarrollar en este documento

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 4: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CREAR “UNA CARPETA” PARA LOS PROYECTOSEN ESTA CARPETA ESTARAN NUESTRAS APLICACIONES Y LOS BUNDLES QUE LA COMPONEN

Definir el nombre de nuestra carpeta de proyectospara este ejemplo vamos a utilizar el nombre sf2pr5

Ubicarse en la carpeta de ejecución del servidor webLa carpeta para nuestros proyectos debe estar una ruta con permisos de ejecución Usualmente en: linux “/var/www” o en windows  “c:/inetpub/web” o “c:/archivos de programas/apache/www”

A continuación ejecutamos el siguiente comando

  git clone https://github.com/symfony/symfonysandbox.git sf2pr5  

   Este comando creara la carpeta sf2pr5 y   de forma automatica se descargará la “última versión”  y la “mas actualizada”   del framework Symfony2

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 5: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

NOTAS DE CONFIGURACIÓN

Puede clonar a través del GIT otros repositorios importantes del Sf2 como su documentación

Para ver todos repositorios oficiales del proyecto visite   http://github.com/symfony

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 6: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

1. PROBAR LA INSTALACIÓN SYMFONY2       http://localhost/sf2pr5/web/app_dev.php

2. CHEQUEAR EL ENTORNO DE TRABAJO SF2       http://localhost/sf2pr5/web/check.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 7: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Vamos crear el bundle MiPrimer

Esta será una aplicación que mostrará un simple listado con dos item

Los objetivos:

Familiarizar al programador con algunas de las particularidades de Symfony2 

● Configurar la aplicación /app

● La estructura basica (modelovistacontrolador) de un bundle /MiEmpresa/MiPrimerBundle

● Base de datos usando Doctrine2

● Cargar de datos iniciales a la base datos

● Y si todo sale bien... mostrar una pagina en el navegador !

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 8: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

scr

app Configuración de la aplicación

Codigo fuente de los bundles que componen la aplicación

Page 9: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOR

app

Registrar el namespacesapp/autoload.php

Dentro del archivo autoload.php existe un arreglo llamado registerNamespaces

$loader>registerNamespaces(array(    'Symfony'                          => __DIR__.'/../vendor/symfony/src',    'Sensio'                             => __DIR__.'/../src',    'MiEmpresa'                      => __DIR__.'/../src',     ....

Page 10: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

app

Registrar el bundle en AppKernel.phpapp/AppKernel.php

Dentro del archivo AppKernel.php existe una función llamada RegisterBundles

En esta función esta definido un arreglo de Bundles

Ahora hay  que ubicar el comentario

Y registrar el bundle que vamos a crear, agregando el siguiente codigo

Los valores con los que se inicializa ese arreglo de Los valores con los que se inicializa ese arreglo de BundlesBundles, , estan separados en secciones, demarcadas  por comentarios.Un detalle: es importante el orden de aparición de los Bundles

new MiEmpresa\MiPrimerBundle\MiPrimerBundle(),

// Register your Bundles

CONFIGURACIÓNMODELOVISTACONTROLADOR

Page 11: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

app

Plantilla principal base.html.phpapp/views/base.html.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

<!DOCTYPE html><html>    <head>        <meta httpequiv="ContentType" content="text/html; charset=utf8" />        <title><?php $view['slots']>output('title', 'Mi Primer Aplicación') ?></title>    </head>    <body>        <?php $view['slots']>output('_content') ?>    </body></html>

Configure aqui elementos comunes de la Configure aqui elementos comunes de la vistavista que seran visibles en todas las paginas de su aplicación que seran visibles en todas las paginas de su aplicación

Page 12: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

app

Configuración Global config.yml    el motor de la vistaapp/config/config.yml

CONFIGURACIÓNMODELOVISTACONTROLADOR

    Ese cambio debe hacerse en el archivo Ese cambio debe hacerse en el archivo app/config/config.ymlapp/config/config.yml dentro de la etiqueta  dentro de la etiqueta app.config:app.config:

Cambiartemplating:    { engines: ['twig'] } #assets_version: SomeVersionScheme

Portemplating:    { engines: ['php','twig'] } #assets_version: SomeVersionScheme

Symfony2 implementa un bundle llamado twig para trabajar el código fuente de las vistas es muy practico, flexible y completo, sin embargo vamos a trabajar la vista de este ejemplo con codigo php.

Para ello debemos cambiar la configuración por defecto de Symfony2 ya que solo viene establecido twig como motor de interpretación del código de las vistas

Page 13: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

app CONFIGURACIÓNMODELOVISTACONTROLADOR

## Doctrine Configuration#doctrine.dbal:#    dbname:   xxxxxxxx#    user:     xxxxxxxx#    password: ~

#doctrine.orm:#    auto_generate_proxy_classes: %kernel.debug%#    mappings:#        HelloBundle: ~

# Doctrine Configurationdoctrine.dbal:    dbname:   MiPrimerBaseDatosSymfony2    user:     root    password: root

doctrine.orm:    auto_generate_proxy_classes: %kernel.debug%    mappings:        HelloBundle: ~        MiPrimerBundle: ~

Cambiar

Configuración Global config.yml    el motor de la base de datosapp/config/config.yml

Por

    Ese cambio debe hacerse en el archivo Ese cambio debe hacerse en el archivo app/config/config.ymlapp/config/config.yml      dentro de las etiquetas dentro de las etiquetas doctrine.dbal: doctrine.dbal: y y doctrine.orm:doctrine.orm:

Page 14: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

app

Configuración Global routing.ymlapp/config/routing.yml

CONFIGURACIÓNMODELOVISTACONTROLADOR

Colocando el siguiente código al final del archivo app/config/routing.yml

MiPrimer:    resource: @MiPrimerBundle/Resources/config/routing.yml

Todas las url de un bundle en particular se configuran dentro de ese bundle, finalmente estas se unifican para la aplicación en el archivo app/config/routing.yml

Con esto hace un efecto de cascada

Al archivo de la aplicación   app/config/routing.yml  le integramos el del bundle MiPrimerBundle/Resources/routing.yml 

Page 15: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Crear el bundle MiPrimer

Crear el directorio del Bundlemkdir p src/MiEmpresa/MiPrimerBundle

Crear y editar el archivo MiPrimerBundle.phpsrc/MiEmpresa/MiPrimerBundle/MiPrimerBundle.php

<?php

namespace MiEmpresa\MiPrimerBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class MiPrimerBundle extends Bundle{    /**     * {@inheritdoc}     */    public function getNamespace()    {        return __NAMESPACE__;    }

    /**     * {@inheritdoc}     */    public function getPath()    {        return strtr(__DIR__, '\\', '/');    }}

CONFIGURACIÓNMODELOVISTACONTROLADOR

Aqui estas creando la Aqui estas creando la carpetacarpeta y el “ y el “archivo principal del bundlearchivo principal del bundle”, en el cual indicas: Primero, cual ”, en el cual indicas: Primero, cual es el es el namespacenamespace del bundle, es decir, el directorio donde estan los archivos del bundle del bundle, es decir, el directorio donde estan los archivos del bundle;;  Segundo  Segundo defines e  inicializas una clase  (class) como bundle defines e  inicializas una clase  (class) como bundle  cuyo nombre se compone del  “cuyo nombre se compone del  “nombre del nombre del bundlebundle” (MiPrimer) seguido de la palabra “” (MiPrimer) seguido de la palabra “BundleBundle”.”.

Agrege el siguiente código

scr

Page 16: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

<?php

namespace MiEmpresa\MiPrimerBundle\Entity;

class MiPrimer{  protected $id;  private $title;  private $body;}

Cree el directorio Entitymkdir p src/MiEmpresa/MiPrimerBundle/Entity

CONFIGURACIÓNMODELOVISTACONTROLADOR

Definición de las tablas de la Base de Datos

El modelo entidadrelación se detalla en el directorio Entity del Bundle Por defecto, el directorio Entity no existe...

Este es un ejemplo básico de la entidad que definiremos en la 

siguiente lamina

La definición de las estructuras de las diferentes tabas de la base de datos de su aplicación son parte del modelo ( esto dentro del concepto: modelovistacontrolador )

scr

Page 17: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Preparar el modelo<?php

namespace MiEmpresa\MiPrimerBundle\Entity;

/** * @orm:Entity */class clientes{    /**     * @orm:Id     * @orm:Column(type="integer")     * @orm:GeneratedValue(strategy="IDENTITY")     */    protected $id;     /**     * @orm:Column(type="string")     * @orm:Column(length="255")     */    private $title;

    /**     * @orm:Column(type="string")     * @orm:Column(length="255")     */    private $body;}

Edite el archivo MiPrimerEntidad.phpsrc/Empresa/MiPrimerBundle/Entity/MiPrimerEntidad.php

Agrege el siguiente código

CONFIGURACIÓNMODELOVISTACONTROLADOR

scr

Page 18: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Continuamos preparando el modelo

Crear un directorio para los datos inicialesmkdir p  src/MiEmpresa/MiPrimerBundle/DataFixtures/ORM

Crear un archivo para esos datos inicialessrc/MiEmpresa/MiPrimerBundle/DataFixtures/ORM/MisDatosIniciales.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

scr

Page 19: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Continuamos preparando el modeloAgrege el siguiente código

<?phpnamespace MiEmpresa\MiPrimerBundle\DataFixtures\ORM;

use Doctrine\ORM\EntityManager,      Doctrine\Common\DataFixtures\FixtureInterface,      MiEmpresa\MiPrimerBundle\Entity\MisDatosIniciales;

class Loadclientes implements FixtureInterface{    public function load($em)    {        $MiCliente1 = new MiCliente();        $MiCliente1>setTitle('Cesar Hernandez');        $MiCliente>setBody('Ing. De Sistemas, graduado en la Universidad Bicentenaria de Aragua');        $em>persist($MiCliente1);

        $MiCliente2 = new MiCliente();        $MiCliente2>setTitle('Sebastian Hernandez');        $MiCliente2>setBody('Estudiante de Maternal, nacido en Lecheria, Estado Anzoátegui');        $em>persist($MiCliente2);

       $em>flush();    }}

CONFIGURACIÓNMODELOVISTACONTROLADOR

scr

Page 20: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOR

Terminamos la configuraciones relacionadas con la base de datosAhora vamos a:

CREAR LA BASE DE DATOS DE LA APLICACIÓN 

Recuerde que el nombre de la base de datos lo indico en el archivoapp/config/config.yml

Este comando debe ejecutarlo estando en la carpeta /sf2pr5Este comando debe ejecutarlo estando en la carpeta /sf2pr5

php app/console doctrine:database:create

Page 21: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOR

Terminamos la configuraciones relacionadas con la base de datosAhora vamos a:

CREAR LAS TABLAS DE LA APLICACIÓN 

Recuerde que la entidad la detallo en el archivoscr/MiEmpresa/MiPrimerBundle/Entity/MiPrimerEntidad.php

Este comando debe ejecutarlo estando en la carpeta /sf2pr5Este comando debe ejecutarlo estando en la carpeta /sf2pr5

php app/console doctrine:schema:create

Page 22: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOR

Terminamos la configuraciones relacionadas con la base de datosAhora vamos a:

CONFIGURAR EL ACCESO A LOS CAMPOS DE LA TABLA DE LA APLICACIÓN 

Este comando va agregar funciones setter() y getter() en el archivoscr/MiEmpresa/MiPrimerBundle/Entity/MiPrimerEntidad.php

Este comando debe ejecutarlo estando en la carpeta /sf2pr5Este comando debe ejecutarlo estando en la carpeta /sf2pr5

php app/console doctrine:generate:entities MiPrimerBundle

Page 23: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOR

Terminamos la configuraciones relacionadas con la base de datosAhora vamos a:

CARGAR LOS DATOS INICIALES

Este comando va a agregar registros a la tabla clienteQue estan definidos en el archivoscr/MiEmpresa/MiPrimerBundle/DataFixtures/ORM/MisDatosIniciales.php

Este comando debe ejecutarlo estando en la carpeta /sf2pr5Este comando debe ejecutarlo estando en la carpeta /sf2pr5

php app/console doctrine:data:load

Page 24: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

La Vista  layout

Crear un layout para el Bundlesrc/MiEmpresa/MiPrimerBundle/Resources/views/layout.html.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

<?php $view>extend('::base.html.php') ?>

<h1>Mi Primer Aplicación</h1>

<?php $view['slots']>output('_content') ?>

LOS LAYOUT SE ORDENAN EN CASCADA        EN ESTE EJEMPLO ESTAN              app/views/base.html.php              src/MiEmpresa/MiPrimerBundle/Resources/views/layout.html.php       UNIDOS POR LA INSTRUCCIÓN              <?php $view>extend('::base.html.php') ?>

Agrege el siguiente código

scr

Page 25: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

El Controlador

Crear el directorio de la vistamkdir p src/MiEmpresa/MiPrimerBundle/Controller

Crear y editar el archivo MiPrimerController.phpsrc/MiEmpresa/MiPrimerBundle/Controller/MiPrimerController.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

<?php

namespace MiEmpresa\MiPrimerBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MiPrimerController extends Controller

{

    public function indexAction()

    {

        $em = $this>container>get('doctrine.orm.entity_manager');

        $Clientes = $em>createQuery('SELECT b FROM MiEmpresa\MiPrimerBundle\Entity\clientes b ORDER BY b.body DESC')>execute();

        return $this>render('MiPrimerBundle:MiPrimer:index.html.php', array('MisRegistros' => $Clientes));

    }

}

scr

Page 26: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

La Vista

Crear el directorio de la vistamkdir p src/MiEmpresa/MiPrimerBundle/Resources/views/MiPrimer/

Crear y editar el archivo index.html.phpsrc/MiEmpresa/MiPrimerBundle/Resources/Resources/views/MiPrimer/index.html.php

CONFIGURACIÓNMODELOVISTACONTROLADOR

<?php $view>extend('MiPrimerBundle::layout.html.php') ?>

<h2> Mis registros </h2>

<ul class='clientes'><?php foreach($MisRegistros as $Clientes): ?>  <li>     <h3><?php echo $Clientes>GetTitle(); ?></h3>     <p><?php echo $Clientes>GetBody(); ?></p>  </li><?php endforeach; ?></ul>

Agrege el siguiente código

scr

Page 27: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

CONFIGURACIÓNMODELOVISTACONTROLADOREl Routing del bundle

Crear el directorio de la configuración del bundlemkdir p  src/MiEmpresa/MiPrimerBundle/Resources/config

Crear y editar el archivo routing.ymlmkdir p src/MiEmpresa/MiPrimerBundle/Resources/config/routing.yml

MiPrimer:    pattern:     /MiPrimer    defaults: { _controller: MiPrimerBundle:MiPrimer:index}

scr

Page 28: Sf2 pr5 mi primer proyecto

   

...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2

- PR5

Limpiamos el cache de Symfony2Ejecutando en la consola del sistema operativo

     rm rf app/cache/*

Si todo salio bien, probamos el bundle en nuestro navegador

       http://localhost/sf2pr5/web/app_dev.php/MiPrimer

CONFIGURACIÓNMODELOVISTACONTROLADOR