Desarrollo Web con Symfony2 integrando Sonata Project parte 1

De WikiSalud
Revisión a fecha de 04:55 8 jun 2015; Karencita (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
Symfony logo.png

Contenido

Fundamentos del Módelo MVC

Modelo Vista Controlador (MVC) es un patrón o modelo de abstracción de desarrollo de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos.

Descripción del módelo

  • Modelo: representa el dominio de los datos. Define la lógica de negocio (la base de datos pertenece a esta capa).
  • Vista: es la interfaz de usuario.
  • Controlador: es el responsable de ejecutar las peticiones del usuario. Es el que invoca peticiones al modelo y llama a las vista.

El flujo que se sigue es el siguiente:

  1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace, etc.)
  2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos.
  3. El controlador accede al modelo (ya sea para insertar, actualizar, eliminar o consultar los datos) de forma adecuada a la acción solicitada por el usuario.
  4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se reflejan los cambios en el modelo.
  5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.
Modelo-Vista-Controlador

Modelo MVC en Symfony2

Cuando un usuario solicita a cierta aplicación web ver el sitio, internamente sucede lo siguiente:

  1. El sistema de enrutamiento determina qué Controlador está asociado con la página inicial del sitio.
  2. Symfony2 ejecuta el Controlador asociado a la portada. Un controlador no es más que una clase PHP en la que puedes ejecutar cualquier código que quieras.
  3. El Controlador solicita al Modelo los datos de la oferta del día. El modelo no es más que una clase PHP especializada en obtener información, normalmente de una base de datos.
  4. Con los datos devueltos por el Modelo, el Controlador solicita a la Vista que cree una página mediante una plantilla y que inserte los datos del Modelo.
  5. El Controlador entrega al servidor la página creada por la Vista.

A pesar de que puedes llegar a hacer cosas muy complejas con Symfony2, el funcionamiento interno siempre es el mismo:

  1. El Controlador manda y ordena
  2. El Modelo busca la información que se le pide
  3. La Vista crea páginas con plantillas y datos.
MVC-Symfony

Symfony2 con Sonata Project

¿Qué es Sonata Project?

Sonata Project es un proyecto que contiene un conjunto de paquetes los cuales se han construido con Symfony. Su codificacion este realizada en su mayoria por el trabajo de la comunidad a nivel mundial; utiliza algunos bundles ya conocidos como:

  • FriendsOfSymfony
  • KNPLabs
  • Symfony CMF
  • Entre otros.

El primer bundle realizado por la comunidad es el AdminBundle que tienen aproximadamente más de 300 mil descargas. En los últimos 3 años, el Equipo Sonata Project y los contribuyentes han ayudado a construir más de 20 bundles que son reutilizados por aquellos que lo necesiten. Cada bundle responde a una necesidad en especifico o a un problema y se han trabajado de forma independiente entre si. Algunos de estos bundles son los siguientes:

  • Core: SontaCoreBundle provee todos los elementos comunes requeridos para los demás bundles de Sonata.
  • Admin: Esta divido en 5 bundles del cual solo utilizaremos 2
    • SonataAdminBundle: contiene todas las librerías centrales y los servicios.
    • Doctrine2 ORM Admin: Integración del ORM Doctrine con el bundle anterior.
  • User: es la integracion del bundle de seguridad llamado FOS/UserBundle y el proyecto Sonata Admin. Este permite el manejo de usuarios y grupos, los perfiles del usuario, el menu según el perfil. Este bundle maneja dos tipos de usuarios: aquellos que pueden editar, son los que poseen el rol master; y los de solo lectura.
  • Block: se utiliza para el manejo de bloques en el Sonata Proyect
Nota: Sitio Oficial Sonata Project

FOS/UserBundle

FOSUserBunde agrega soporte para los usuarios del sistema desde la base de datos. Provee un framework flexible para el manejo de los usuarios. Incluye:

  • El registro
  • Cambio de contraseña
  • La autenticación.
Nota: Sitio Oficial FOSUserBundle

FOSJsRoutingBundle

Este bundle permite utilizar tus rutas desde el código JavaScript. Es posible generar tus URL con parámetros; si se requiere, tal como se realiza con el componente de Router de Symfony 2.

Nota: Sitio Oficial FOSJsRoutingBundle


Instalando los elementos necesarios

Véase Preparando el entorno de desarrollo web

Instalando Symfony2

Para iniciar con la instalación, descargar Symfony de su página oficial Symfony2. Para realizar un proyecto con Symfony2 hay dos formas de hacerlo:

  1. De forma manual.
  2. Desde el IDE de desarrollo NetBeans

Véase Desarrollo web Symfony2 para una aplicación sin sonata.

Para este articulo utilizaremos para la instalación un repositorio git en donde se tiene una plantilla que contiene la instalación de symfony junto con sonata project. Si se desea realizar la instalación completa de sonata project, puede visita el articulo Desarrollo web Symfony2 y Sonata Project.

Clonando proyecto de symfony desde repositorio

Primero se deberá configurar Git en el equipo, para ello seguir el siguiente artículo Configurar un proyecto con Git y realizar los pasos 1,2 y 3.

Se procede a clonar el proyecto en la siguiente ruta /home/usuario/sistemas/, para ello abrir una consola como usuario norma y ejecutar la siguiente instrucción:

cd

Esto para estar en el /home del usuario, luego ejecutar

mkdir sistemas;cd sistemas

Con la instrucción anterior se creo la carpeta y entramos a ella. Ahora se procede a clonar el proyecto:

git clone git@repositorio_git_proporcionado:carpeta_contenedora/sonata.git
Nota: Cambiar repositorio_git_proporcionado por el repositorio dado por el instructor
carpeta_contenedora por la ruta proporcionada por el instructor

Esperar hasta que el proyecto se clone por completo, luego ejecutar la siguiente instrucción para entrar al proyecto

cd sonata

Permisos a las carpetas cache y logs

Antes de iniciar se deben de crear las carpetas cache y logs, para ello ejecutar como usuario normal:

mkdir -p app/cache app/logs/

Para realizar los permisos de las carpetas se hará con ACL. Las ACL son listas de control que tienen todos los objetos del directorio y que permiten establecer permisos de las diferentes propiedades de estos objetos concediendo o denegando el acceso a la modificación de estas a los diferentes usuarios o procesos del sistema. Para su instalación, como usuario root escribimos en consola:

aptitude update
aptitude install acl

Esto, actualizará la lista de paquetes y luego instalará el paquete acl. Para dar los permisos a la carpetas cache y logs se debe hacer lo siguiente:

  • Editar como usuario root el archivo /etc/fstab, ya sea con vi o nano, buscar la línea en donde se encuentra la partición en donde esta el proyecto Symfony que estamos configurando. Si el proyecto se encuentra en el home del usuario, la línea se verá similar a la que se muestra a continuación:
# /home was on /dev/sda6 during installation
UUID=251157eb-2319-44c3-a617-bb61f4eb72da /home           ext3    defaults        0       2

Agregar en las opciones la palabra acl para poder aplicar ACL al directorio del proyecto, como se muestra en la siguiente línea:

UUID=251157eb-2319-44c3-a617-bb61f4eb72da /home           ext3    defaults,acl        0       2
  • Remontar la partición que se acaba de modificar. Ejecutar en consola como usuario root:
/bin/mount -o remount /home
  • Ejecutar las siguientes órdenes como usuario normal:
setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs

Uso de Composer

Plantilla Symfony Sonata utiliza Composer para manejar las dependencias (bundles) que son utilizados dentro del proyecto.

Primero se debe de instalar la librería para realizar la descarga. Como usuario root ejecutar:

aptitude install curl

Como usuario normal ejecutar lo siguiente

curl -s http://getcomposer.org/installer | php

Configuración de la base de datos

Creación del usuario de la base de datos como usuario postgres ejecutar:

createuser -DRSP nombreUsuario
D: No puede crear base de datos
R: No puede crear roles
S: No es superusuario
P: Para que muestre un mensaje en donde se pida la contraseña del nuevo usuario

Creación de la base de datos del sistema

createdb nombreBaseDatos -O nombreUsuario
O: Dueño de la base de datos

Instalación de las dependencias (Bundles)

Ejecutar el siguiente comando como usuario normal estando dentro del proyecto clonado.

php composer.phar install

Esto servira para descargar todas las dependencias configuradas en el composer.json.

En la nueva versión de symfony, la creación del archivo de configuración es creada automáticamente desde el instalador del composer, los parámetros iniciales de un proyecto son los que se muestran en la siguiente imagen:

Symfony sonata35.png

Se crea un archivo denominado parameters.yml que es guardado en la ruta app/config. Este contiene la configuración del driver de conexión, todo lo relacionado con la base de datos, los usuarios para el envio de correo, la localización y un secret que se utiliza para la parte de seguridad.

Ahora se procede a crear un nuevo secret, para ello ejecutar desde consola:

mktemp |sha1sum

Esto generará un secret como se muestra en la siguiente figura:

Symfony sonata36.png

Copiar toda la combinación de letras hasta el espacio antes del - y colocarlo en el archivo parameters.yml, en la variable secret

Configurar Apache

Véase Virtual_Host.

NOTA: El DocumentRoot debe ser /home/usuario/sistemas/sonata/web.
Nombre del sitio: sonata.localhost

Habilitar el modo de reescritura con la siguiente instrucción como usuario root:

a2enmod rewrite

Reiniciar el servicio de Apache

 /etc/init.d/apache2 restart


Para corroborar que funcione correctamente se debe de ejecutar desde el navegador el sitio sonata.localhost, deberá mostrar lo siguiente:

Symfony sonata37.png

Verificando la configuración del Sistema

Antes de empezar hay que asegurarse que el sistema local está configurado correctamente para Symfony y sus dependencias.

Acceder al script **config.php** desde el navegador:

http://sonata.localhost/config.php

Symfony sonata38.png

Si se obtienen warnings o recomendaciónes, corregirlas antes de empezar a utilizar el sistema. Las recomendaciones no es obligatorio corregirlas solo los warnings. Luego de haber corregido lo necesario aparecerá algo como lo siguiente:

Symfony sonata39.png

Actualización de la base de datos

Actualizar el esquema de la base de datos

   php app/console doctrine:schema:update --force


Symfony sonata40.png

Al realizar la siguiente instrucción se creará en el esquema de la base de datos las siguientes tablas y secuencias:

Symfony sonata42.png

Son las que maneja el bundle para la seguridad.

Creación del usuario dentro del sistema

Crear el usuario que tendrá los privilegios de SUPER ADMIN y tendrá acceso total al sistema.

   php app/console fos:user:create --super-admin

Pedirá el nombre del usuario, la contraseña y el correo electronico.

Symfony sonata41.png

Limpiar la cache del sistema e instalar los assets:

   php app/console cache:clear; php app/console assets:install web --symlink

Ingresar al sistema.

   http://sonata.localhost/app_dev.php/

Al iniciar sesión se mostrará lo siguiente:

Symfony sonata43.png

Parte 2

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas