...UN PRIMER PROYECTO EN SYMFONY2...UN PRIMER PROYECTO EN SYMFONY2
- PR5
CÉSAR HERNÁNDEZ
SYMFONY2PRIMER PROYECTO EN SYMFONY2 PR5
Version 00031211
...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
...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
...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
...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
...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
...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
...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
...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', ....
...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
...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
...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
...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:
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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
...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