SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
php | Bitter Sweet Symfony!
Desarrollo de una Micro-Red-Social con Symfony
Ricard Luquero (rluquero@gmail.com)
CTO de Construmatica.com (Grupo Intercom)

Aldo Chiecchia (zimage@tiscali.it)
Desarrollador web para Atrapalo.com
Presentación de la práctica


     Desarrollo de una micro-red-social
presentando las principales características de
                  Symfony
Sumario

•   Instalación y configuración
•   ¿Cómo va a ser nuestra MSN?
•   Creación del modelo de datos
•   Primeros pasos en el MVC
Punto de partida
Esta práctica está basada en el
• quot;My first symfony projectquot; que puede
  encontrarse en la home de Symfony:
  http://www.symfony-project.org
Esa práctica constituye una muy buena primera toma de
contacto con Symfony. Nosotros vamos a repasarla
realizando ciertas modificaciones para enriquecerla.

Para conocer más al detalle el framework, aun más
recomendable es el Tutorial de Askeet.
Instalación y configuración
Es mucho más que recomendable la
instalación de Symfony mediante PEAR,
pero para nuestra práctica vamos a
descargar la sandbox ya que nos interesa
centrarnos en otros aspectos del framework.
      Symfony Home > Installation
Instalación y configuración (2)
•   Descargamos la sandbox
•   La descomprimimos en el root del webserver (Apache)
•   La renombramos como quot;msnquot; (micro-s...)
•   Validamos la ruta: http://localhost/msn/web, donde debería
    aparecernos algo parecido a esto:
Estructura del proyecto
Es el momento de echar un vistazo a la
estructura del proyecto.
Prestamos especial atención a los directorios:
/apps
/apps/frontend
/apps/frontend/modules
/apps/frontend/templates
/lib
/lib/model
/web
¿Cómo va a ser nuestra MSN?
Las expectativas en cuanto a la prestaciones
de nuestra micro red no son muy altas, nos
conformaremos con una aplicación que sea
capaz de:
 • Mostrar el listado de usuarios
 • Mostrar la información de un usuario en
   particular
 • Ver las relaciones de amistad entre
   usuarios
 • Ver los mensajes que se envían los
   usuarios.
Creación del modelo de datos
Lo que nos interesa en última instancia es disponer
del modelo de datos en XML, así que podemos
crearlo directamente o bien diseñarlo con alguna
herramienta gráfica.

Nosotros hemos optado por el uso de una
herramienta gráfica si bien se ofrece el XML final
para agilizar este paso.

Para el diseño del modelo usaremos DBDesigner
que puede descargarse de:

http://www.fabforce.net/dbdesigner4/
Creación del modelo de datos (2)
Durante el proceso necesitaremos
transformar el 'ugly XML' de DBDesigner en
un 'nice XML' listo para ser procesado por
Symfony.
Creación del modelo de datos (3)
Para poder realizar esta transformación diponemos de un
pequeño script que deberemos copiar junto con la librería que
requiere. (se pueden encontrar en el msn_pack.zip)
/batch/create_schema.php
/batch/lib/dbd2propel.xsl

Es necesario que PHP disponga de la extensión XSL.
 • En Linux puede instalarse mediante:

yum install php-xml / apt-get install php5-xsl

• En Windows será necesasrio activar la extensión XSL de
  PHP si no está activada.
Creación del modelo de datos (4)
Creación del modelo de datos (4)
Teniendo en cuenta que tenemos el archivo:
/config/dbdesigner_msn.xml
(creado con DBDesigner, pero puede encontrare en el msn_pack.zip)

ejecutamos el script:
    php batchcreate_schema.php

que nos creará el archivo:
    /config/schema.xml
(disponible también en el msn_pack.zip)

Nota: Debemos asegurarnos de haber eliminado el archivo: /config/schema.yml
Importación de los datos de prueba
Preparamos un archivo con los datos de
prueba para nuestra red:
/data/fixtures/test_data.yml
User:
aldo:
username: zim
first_name: Aldo
last_name: Chiecchia
description: Desarrollador web para Atrapalo.com
...
(disponible en el msn_pack.zip)
Ejecución del comando mágico
En este momento disponemos del
schema.xml y de los datos del juego de
pruebas test_data.yml así que ya podemos
ejecutar el comando mágico:
     symfony propel-build-all-load frontend
Creación de los módulos
Para poder disponer de un módulo sobre el
que trabajar y poder empezar a ver algo de
nuestra aplicación deberemos crearlo con el
comando que Symfony pone a nuestra
disposición:
       symfony init-module frontend user
Configuración inicial del routing
Necesitamos modificar la página principal de
nuestra aplicación para que apunte al nuevo
módulo que hemos creado.
/apps/frontend/config/routing.yml
homepage:
url: /
param: { module: user, action: index }


Vacíamos la caché:
symfony cc
Configuración de la home
Renombramos el archivo indexSuccess.php a
listSuccess.php y creamos una redirección interna de la
acción quot;indexquot; a la acción quot;listquot; ya que inicialmente
mostraremos en la home el listado de usuarios de la
red.

Nuestra acción quedará así:
/apps/frontend/modules/user/actions/actions.class.php
public function executeIndex() {
$this->forward('user', 'list');
}

public function executeList() {}
Configuración de la home (2)
Para poder ver que realmente estamos avanzando,
vamos a editar el template que se muestra en la
homepage de nuestra aplicación:
/apps/modules/user/templates/listSuccess.php
<h1>User list</h1>


y revisitamos nuestra home.
Dejando la home presentable
Le damos algo de quot;vidillaquot; a la home mediante una
plantilla obtenida en http://www.oswd.org/
• Copiamos el contenido de template_oswd/css/sytle.css* en
  nuestro /web/css/main.css

• Copiamos el directorio template_oswd/img* y a /web/img
  eliminamos el directorio /web/images que venía con la sandbox.

• Hacemos un quot;remixquot; con el template_oswd/index.htm* y el
  template principal de nuestra aplicación
  (/apps/frontend/templates/layout.php) conservando obviamente
  la línea:
<?php echo $sf_data->getRaw('sf_content') ?>

* todos estos archivos pueden encontrarse en el msn_pack.zip
Dejando la home presentable (2)
Modoficamos ligeramente el layout.php para que
sea capaz de redirigir a la home.
/apps/modules/user/templates/listSuccess.php
<h2><?php echo link_to('Micro-Social-Network', '@homepage'); ?></h2>

<div id=quot;menuquot;>
<ul>
<li><?php echo link_to('home', '@homepage', 'class=current'); ?></li>
<li><a href=quot;#quot;>sign-in</a></li>
<li><a href=quot;#quot;>login/logout</a></li>
</ul>
</div>
Dejando la home presentable (3)
Revisamos como va quedando nuestra home:
            http://localhost/msn/web

Bueno, estoy ya va tomando algo de forma, vamos
a preparar ahora el listado de usuarios:
 • Recuperando el listado desde el action
   (controller)
 • Mostrando el listado desde el template
   (view)
Trabajando con el View / Controller
/apps/frontend/modules/user/actions/actions.class.php
$this->users = BaseUserPeer::doSelect(new Criteria());

/apps/frontend/modules/user/templates/listSuccess.php
<ul>
<?php foreach ($users as $user): ?>
<li><?php echo link_to($user->getFirstName() . ' ' . $user-
>getLastName(), 'user/show?id=' . $user->getId()); ?></li>
<?php endforeach; ?>
</ul>
El Model entra en acción
Observamos que en la anterior acción el código
relacionado con la obtenición del nombre de usuario
no es el mas adecuado dentro de una estructura
MVC, así que hacemos entrar en acción al model:
/lib/model/User.php
   public function __toString () {
       return $this->getFirstName () . ' ' . $this->getLastName ();
   }
Paseo por el view.yml
Nos damos un pequeño paseo por el view.yml para
configurar el título y vor sus opciones.
/apps/frontend/config/view.yml
default:
http_metas:
content-type: text/html

metas:
title: MSN - Micro Social Network
robots: index, follow
description: symfony project
keywords: symfony, project
....
Dando unos pasos más
Lo que nos queda por ver es como trabajar más
detalladamente con la estructura de Symfony. Los
quot;slidesquot; que quedan muestran únicamente el
contenido de los 2 archivos que nos permiten
disponer de algo más de interactividad en nuestras
páginas.

En el controlador de acciones añadiremos una
nueva función: executeShow que muestra la
información específica de usuarios y crearemos
también un nuevo template para visualizar esa
acción.
/apps/frontend/modules/user/actions/actions.class.php


public function executeShow() {
    $userId = $this->getRequestParameter('id');

   $this->user = UserPeer::retrieveByPk($userId);
   $this->forward404Unless($this->user);

   // Se obtienen todos los enviados al usuario (es decir donde él es el receptor)
   $c = new Criteria();
   $c->add(MessagePeer::RECEIVER_ID, $userId);
   $c->addDescendingOrderByColumn(MessagePeer::CREATED_AT);
   $this->messages = MessagePeer::doSelect($c);



(...)
/apps/frontend/modules/user/actions/actions.class.php (2)



(...)
    // Se obtienen todas las relaciones en las que está el usuario, pero únicamente
    // las que han sido confirmadas
    $c = new Criteria();
    $c->addJoin(RelationPeer::STATUS_ID, StatusPeer::ID);
    $criterion = $c->getNewCriterion(RelationPeer::REQUESTER_ID, $userId);
    $criterion->addOr($c->getNewCriterion(RelationPeer::RECEIVER_ID, $userId));
    $criterion->addAnd($c->getNewCriterion(StatusPeer::NAME, 'accepted'));
    $c->add($criterion);

    $this->relations = RelationPeer::doSelect($c);
}
/apps/frontend/modules/user/templates/showSuccess.php


<h2>Profile</h2>
<ul>
    <li><strong>First name:</strong> <?php echo $user->getFirstName(); ?></li>
    <li><strong>Last name:</strong> <?php echo $user->getLastName(); ?></li>
    <li><strong>Username:</strong> <?php echo $user->getUsername(); ?></li>
    <li><strong>Description:</strong><br/><?php echo $user->getDescription(); ?></li>
</ul>



(...)
/apps/frontend/modules/user/templates/showSuccess.php (2)


(...)
<h2>Friends</h2>
<ul>
   <?php foreach ($relations as $relation): ?>
     <?php
     if ($relation->getRequesterId() == $user->getId())
       $friend = $relation->getUserRelatedByReceiverId ();
     else
       $friend = $relation->getUserRelatedByRequesterId ();
     ?>
     <li><?php echo link_to ($friend, 'user/show?id=' . $friend->getId()); ?></li>
   <?php endforeach; ?>
</ul>

(...)
/apps/frontend/modules/user/templates/showSuccess.php (3)



(...)
<h2>Message area</h2>
<ul>
    <?php foreach ($messages as $message): ?>
     <li>
       <?php echo $message->getContent(); ?><br/>
         <span class=quot;datequot;><?php echo $message->getCreatedAt(); ?></span> -
          <?php echo link_to($message->getUserRelatedBySenderId(), 'user/show?id=' .
                $message->getSenderId(), 'class=grey'); ?>
         <br/><br/>
     </li>
   <?php endforeach; ?>
</ul>
Conclusiones
Hemos visto algunas de las funcionalidades básicas
que ofrece Symfony, desde la generación de las
clases asociadas a las tablas de la base de datos,
pasando por el uso de Propel y las manera en la
que podemos navegar por todas las relaciones
entre objetos de forma fácil.
Créditos
Este taller fue presentado en el marco de la primera
Barcelona PHP Workshop en junio de 2008.

Contenu connexe

Tendances

WordPress como back-end de nuestras apps
WordPress como back-end de nuestras appsWordPress como back-end de nuestras apps
WordPress como back-end de nuestras appsJaime Fernández
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2guest39ff1b
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web javaCésar Ocampo
 
Examen febrero 2017-2018_daw_daw_solucion_ (1)
Examen febrero 2017-2018_daw_daw_solucion_ (1)Examen febrero 2017-2018_daw_daw_solucion_ (1)
Examen febrero 2017-2018_daw_daw_solucion_ (1)jomadega1
 
Web inmobiliaria con word press y multilinkcrm
Web inmobiliaria con word press y multilinkcrmWeb inmobiliaria con word press y multilinkcrm
Web inmobiliaria con word press y multilinkcrmmultilinkcrm
 
manual-conexion-net beanmysql
 manual-conexion-net beanmysql manual-conexion-net beanmysql
manual-conexion-net beanmysqlperjam100
 
Replicación SQL Server 2008
Replicación SQL Server 2008Replicación SQL Server 2008
Replicación SQL Server 2008UTA
 
Conociendo el Patron Modelo Vista Controlador
Conociendo el Patron   Modelo Vista ControladorConociendo el Patron   Modelo Vista Controlador
Conociendo el Patron Modelo Vista Controladorlissette_torrealba
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006Samuel Marrero
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosJavier Eguiluz
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLJesus Alberto Casco Agudelo
 

Tendances (19)

Trabajo de base de datos en sqlserver
Trabajo de base de datos en sqlserverTrabajo de base de datos en sqlserver
Trabajo de base de datos en sqlserver
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
WordPress como back-end de nuestras apps
WordPress como back-end de nuestras appsWordPress como back-end de nuestras apps
WordPress como back-end de nuestras apps
 
Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2Java Primeros Pasos Revista- Edición 2
Java Primeros Pasos Revista- Edición 2
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Examen febrero 2017-2018_daw_daw_solucion_ (1)
Examen febrero 2017-2018_daw_daw_solucion_ (1)Examen febrero 2017-2018_daw_daw_solucion_ (1)
Examen febrero 2017-2018_daw_daw_solucion_ (1)
 
Web inmobiliaria con word press y multilinkcrm
Web inmobiliaria con word press y multilinkcrmWeb inmobiliaria con word press y multilinkcrm
Web inmobiliaria con word press y multilinkcrm
 
Primefaces hotel.. TERMINADO
Primefaces hotel.. TERMINADOPrimefaces hotel.. TERMINADO
Primefaces hotel.. TERMINADO
 
manual-conexion-net beanmysql
 manual-conexion-net beanmysql manual-conexion-net beanmysql
manual-conexion-net beanmysql
 
Replicación SQL Server 2008
Replicación SQL Server 2008Replicación SQL Server 2008
Replicación SQL Server 2008
 
Conociendo el Patron Modelo Vista Controlador
Conociendo el Patron   Modelo Vista ControladorConociendo el Patron   Modelo Vista Controlador
Conociendo el Patron Modelo Vista Controlador
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Practica 4
Practica 4Practica 4
Practica 4
 
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQLMANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
MANUAL DE CREACION DE UNA BASE DE DATOS EN POSTGRESQL
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Manual php nuke
Manual php nukeManual php nuke
Manual php nuke
 
Conexión de Base de Datos
Conexión de Base de DatosConexión de Base de Datos
Conexión de Base de Datos
 

Similaire à Php Bitter Sweet Symfony!

Primeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier AznarPrimeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier AznarPablo Aguilera
 
Aplicaciones_Android_JPD.pptx
Aplicaciones_Android_JPD.pptxAplicaciones_Android_JPD.pptx
Aplicaciones_Android_JPD.pptxMarianaRomo28
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesdeivit86
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2Steven Gomez
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuDavid Vevelas
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controllerhydras_cs
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sasRafael Toro
 
Documentacion del proyecto
Documentacion del proyectoDocumentacion del proyecto
Documentacion del proyectoFernando Sorto
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoJuan Rodríguez
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion juandavid1118
 
eyeOS: Arquitectura y desarrollo de una aplicación
eyeOS: Arquitectura y desarrollo de una aplicacióneyeOS: Arquitectura y desarrollo de una aplicación
eyeOS: Arquitectura y desarrollo de una aplicaciónJose Luis Lopez Pino
 
Infografia empleados laravel
Infografia empleados laravelInfografia empleados laravel
Infografia empleados laravelFUNDET ECUADOR
 

Similaire à Php Bitter Sweet Symfony! (20)

Primeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier AznarPrimeros pasos con Backbone js, por Xavier Aznar
Primeros pasos con Backbone js, por Xavier Aznar
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Aplicaciones_Android_JPD.pptx
Aplicaciones_Android_JPD.pptxAplicaciones_Android_JPD.pptx
Aplicaciones_Android_JPD.pptx
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntu
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
Symfony Parte 2
Symfony Parte 2Symfony Parte 2
Symfony Parte 2
 
Symfony
SymfonySymfony
Symfony
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Mi app-asp-net-mvc2
Mi app-asp-net-mvc2Mi app-asp-net-mvc2
Mi app-asp-net-mvc2
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controller
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Servicios web
Servicios webServicios web
Servicios web
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sas
 
Documentacion del proyecto
Documentacion del proyectoDocumentacion del proyecto
Documentacion del proyecto
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion
 
eyeOS: Arquitectura y desarrollo de una aplicación
eyeOS: Arquitectura y desarrollo de una aplicacióneyeOS: Arquitectura y desarrollo de una aplicación
eyeOS: Arquitectura y desarrollo de una aplicación
 
Infografia empleados laravel
Infografia empleados laravelInfografia empleados laravel
Infografia empleados laravel
 

Dernier

Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2montoyagabriela340
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....Aaron Betancourt
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfangelinebocanegra1
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 

Dernier (20)

BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdf
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 

Php Bitter Sweet Symfony!

  • 1. php | Bitter Sweet Symfony! Desarrollo de una Micro-Red-Social con Symfony Ricard Luquero (rluquero@gmail.com) CTO de Construmatica.com (Grupo Intercom) Aldo Chiecchia (zimage@tiscali.it) Desarrollador web para Atrapalo.com
  • 2. Presentación de la práctica Desarrollo de una micro-red-social presentando las principales características de Symfony
  • 3. Sumario • Instalación y configuración • ¿Cómo va a ser nuestra MSN? • Creación del modelo de datos • Primeros pasos en el MVC
  • 4. Punto de partida Esta práctica está basada en el • quot;My first symfony projectquot; que puede encontrarse en la home de Symfony: http://www.symfony-project.org Esa práctica constituye una muy buena primera toma de contacto con Symfony. Nosotros vamos a repasarla realizando ciertas modificaciones para enriquecerla. Para conocer más al detalle el framework, aun más recomendable es el Tutorial de Askeet.
  • 5. Instalación y configuración Es mucho más que recomendable la instalación de Symfony mediante PEAR, pero para nuestra práctica vamos a descargar la sandbox ya que nos interesa centrarnos en otros aspectos del framework. Symfony Home > Installation
  • 6. Instalación y configuración (2) • Descargamos la sandbox • La descomprimimos en el root del webserver (Apache) • La renombramos como quot;msnquot; (micro-s...) • Validamos la ruta: http://localhost/msn/web, donde debería aparecernos algo parecido a esto:
  • 7. Estructura del proyecto Es el momento de echar un vistazo a la estructura del proyecto. Prestamos especial atención a los directorios: /apps /apps/frontend /apps/frontend/modules /apps/frontend/templates /lib /lib/model /web
  • 8. ¿Cómo va a ser nuestra MSN? Las expectativas en cuanto a la prestaciones de nuestra micro red no son muy altas, nos conformaremos con una aplicación que sea capaz de: • Mostrar el listado de usuarios • Mostrar la información de un usuario en particular • Ver las relaciones de amistad entre usuarios • Ver los mensajes que se envían los usuarios.
  • 9. Creación del modelo de datos Lo que nos interesa en última instancia es disponer del modelo de datos en XML, así que podemos crearlo directamente o bien diseñarlo con alguna herramienta gráfica. Nosotros hemos optado por el uso de una herramienta gráfica si bien se ofrece el XML final para agilizar este paso. Para el diseño del modelo usaremos DBDesigner que puede descargarse de: http://www.fabforce.net/dbdesigner4/
  • 10. Creación del modelo de datos (2) Durante el proceso necesitaremos transformar el 'ugly XML' de DBDesigner en un 'nice XML' listo para ser procesado por Symfony.
  • 11. Creación del modelo de datos (3) Para poder realizar esta transformación diponemos de un pequeño script que deberemos copiar junto con la librería que requiere. (se pueden encontrar en el msn_pack.zip) /batch/create_schema.php /batch/lib/dbd2propel.xsl Es necesario que PHP disponga de la extensión XSL. • En Linux puede instalarse mediante: yum install php-xml / apt-get install php5-xsl • En Windows será necesasrio activar la extensión XSL de PHP si no está activada.
  • 12. Creación del modelo de datos (4)
  • 13. Creación del modelo de datos (4) Teniendo en cuenta que tenemos el archivo: /config/dbdesigner_msn.xml (creado con DBDesigner, pero puede encontrare en el msn_pack.zip) ejecutamos el script: php batchcreate_schema.php que nos creará el archivo: /config/schema.xml (disponible también en el msn_pack.zip) Nota: Debemos asegurarnos de haber eliminado el archivo: /config/schema.yml
  • 14. Importación de los datos de prueba Preparamos un archivo con los datos de prueba para nuestra red: /data/fixtures/test_data.yml User: aldo: username: zim first_name: Aldo last_name: Chiecchia description: Desarrollador web para Atrapalo.com ... (disponible en el msn_pack.zip)
  • 15. Ejecución del comando mágico En este momento disponemos del schema.xml y de los datos del juego de pruebas test_data.yml así que ya podemos ejecutar el comando mágico: symfony propel-build-all-load frontend
  • 16. Creación de los módulos Para poder disponer de un módulo sobre el que trabajar y poder empezar a ver algo de nuestra aplicación deberemos crearlo con el comando que Symfony pone a nuestra disposición: symfony init-module frontend user
  • 17. Configuración inicial del routing Necesitamos modificar la página principal de nuestra aplicación para que apunte al nuevo módulo que hemos creado. /apps/frontend/config/routing.yml homepage: url: / param: { module: user, action: index } Vacíamos la caché: symfony cc
  • 18. Configuración de la home Renombramos el archivo indexSuccess.php a listSuccess.php y creamos una redirección interna de la acción quot;indexquot; a la acción quot;listquot; ya que inicialmente mostraremos en la home el listado de usuarios de la red. Nuestra acción quedará así: /apps/frontend/modules/user/actions/actions.class.php public function executeIndex() { $this->forward('user', 'list'); } public function executeList() {}
  • 19. Configuración de la home (2) Para poder ver que realmente estamos avanzando, vamos a editar el template que se muestra en la homepage de nuestra aplicación: /apps/modules/user/templates/listSuccess.php <h1>User list</h1> y revisitamos nuestra home.
  • 20. Dejando la home presentable Le damos algo de quot;vidillaquot; a la home mediante una plantilla obtenida en http://www.oswd.org/ • Copiamos el contenido de template_oswd/css/sytle.css* en nuestro /web/css/main.css • Copiamos el directorio template_oswd/img* y a /web/img eliminamos el directorio /web/images que venía con la sandbox. • Hacemos un quot;remixquot; con el template_oswd/index.htm* y el template principal de nuestra aplicación (/apps/frontend/templates/layout.php) conservando obviamente la línea: <?php echo $sf_data->getRaw('sf_content') ?> * todos estos archivos pueden encontrarse en el msn_pack.zip
  • 21. Dejando la home presentable (2) Modoficamos ligeramente el layout.php para que sea capaz de redirigir a la home. /apps/modules/user/templates/listSuccess.php <h2><?php echo link_to('Micro-Social-Network', '@homepage'); ?></h2> <div id=quot;menuquot;> <ul> <li><?php echo link_to('home', '@homepage', 'class=current'); ?></li> <li><a href=quot;#quot;>sign-in</a></li> <li><a href=quot;#quot;>login/logout</a></li> </ul> </div>
  • 22. Dejando la home presentable (3) Revisamos como va quedando nuestra home: http://localhost/msn/web Bueno, estoy ya va tomando algo de forma, vamos a preparar ahora el listado de usuarios: • Recuperando el listado desde el action (controller) • Mostrando el listado desde el template (view)
  • 23. Trabajando con el View / Controller /apps/frontend/modules/user/actions/actions.class.php $this->users = BaseUserPeer::doSelect(new Criteria()); /apps/frontend/modules/user/templates/listSuccess.php <ul> <?php foreach ($users as $user): ?> <li><?php echo link_to($user->getFirstName() . ' ' . $user- >getLastName(), 'user/show?id=' . $user->getId()); ?></li> <?php endforeach; ?> </ul>
  • 24. El Model entra en acción Observamos que en la anterior acción el código relacionado con la obtenición del nombre de usuario no es el mas adecuado dentro de una estructura MVC, así que hacemos entrar en acción al model: /lib/model/User.php public function __toString () { return $this->getFirstName () . ' ' . $this->getLastName (); }
  • 25. Paseo por el view.yml Nos damos un pequeño paseo por el view.yml para configurar el título y vor sus opciones. /apps/frontend/config/view.yml default: http_metas: content-type: text/html metas: title: MSN - Micro Social Network robots: index, follow description: symfony project keywords: symfony, project ....
  • 26. Dando unos pasos más Lo que nos queda por ver es como trabajar más detalladamente con la estructura de Symfony. Los quot;slidesquot; que quedan muestran únicamente el contenido de los 2 archivos que nos permiten disponer de algo más de interactividad en nuestras páginas. En el controlador de acciones añadiremos una nueva función: executeShow que muestra la información específica de usuarios y crearemos también un nuevo template para visualizar esa acción.
  • 27. /apps/frontend/modules/user/actions/actions.class.php public function executeShow() { $userId = $this->getRequestParameter('id'); $this->user = UserPeer::retrieveByPk($userId); $this->forward404Unless($this->user); // Se obtienen todos los enviados al usuario (es decir donde él es el receptor) $c = new Criteria(); $c->add(MessagePeer::RECEIVER_ID, $userId); $c->addDescendingOrderByColumn(MessagePeer::CREATED_AT); $this->messages = MessagePeer::doSelect($c); (...)
  • 28. /apps/frontend/modules/user/actions/actions.class.php (2) (...) // Se obtienen todas las relaciones en las que está el usuario, pero únicamente // las que han sido confirmadas $c = new Criteria(); $c->addJoin(RelationPeer::STATUS_ID, StatusPeer::ID); $criterion = $c->getNewCriterion(RelationPeer::REQUESTER_ID, $userId); $criterion->addOr($c->getNewCriterion(RelationPeer::RECEIVER_ID, $userId)); $criterion->addAnd($c->getNewCriterion(StatusPeer::NAME, 'accepted')); $c->add($criterion); $this->relations = RelationPeer::doSelect($c); }
  • 29. /apps/frontend/modules/user/templates/showSuccess.php <h2>Profile</h2> <ul> <li><strong>First name:</strong> <?php echo $user->getFirstName(); ?></li> <li><strong>Last name:</strong> <?php echo $user->getLastName(); ?></li> <li><strong>Username:</strong> <?php echo $user->getUsername(); ?></li> <li><strong>Description:</strong><br/><?php echo $user->getDescription(); ?></li> </ul> (...)
  • 30. /apps/frontend/modules/user/templates/showSuccess.php (2) (...) <h2>Friends</h2> <ul> <?php foreach ($relations as $relation): ?> <?php if ($relation->getRequesterId() == $user->getId()) $friend = $relation->getUserRelatedByReceiverId (); else $friend = $relation->getUserRelatedByRequesterId (); ?> <li><?php echo link_to ($friend, 'user/show?id=' . $friend->getId()); ?></li> <?php endforeach; ?> </ul> (...)
  • 31. /apps/frontend/modules/user/templates/showSuccess.php (3) (...) <h2>Message area</h2> <ul> <?php foreach ($messages as $message): ?> <li> <?php echo $message->getContent(); ?><br/> <span class=quot;datequot;><?php echo $message->getCreatedAt(); ?></span> - <?php echo link_to($message->getUserRelatedBySenderId(), 'user/show?id=' . $message->getSenderId(), 'class=grey'); ?> <br/><br/> </li> <?php endforeach; ?> </ul>
  • 32. Conclusiones Hemos visto algunas de las funcionalidades básicas que ofrece Symfony, desde la generación de las clases asociadas a las tablas de la base de datos, pasando por el uso de Propel y las manera en la que podemos navegar por todas las relaciones entre objetos de forma fácil.
  • 33. Créditos Este taller fue presentado en el marco de la primera Barcelona PHP Workshop en junio de 2008.