Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Desarrollo de Aplicaciones con Symfony 3 y Oracle

Desarrollo de Aplicaciones con Symfony 3 y Oracle

Como desarrollar una aplicación de forma ágil utilizando
el framework Symfony 3 y el motor de base de datos Oracle.

Avatar for Cristian Reyes

Cristian Reyes

November 12, 2016
Tweet

Other Decks in Programming

Transcript

  1. Contenido Teórico Contenido Práctico Como desarrollar una aplicación de forma

    ágil utilizando el framework Symfony 3 y el motor de base de datos Oracle. Como instalar y configurar bundles que automatizan diferentes tareas en nuestra aplicación y harán nuestra vida más fácil.
  2. 3 Hoy por hoy SYMFONY3 se ha convertido en unos

    de los frameworks más potentes para PHP. Su filosofía de desarrollo basado en las mejores prácticas con una comunidad de desarrolladores bastante grande a generado un mayor interés y demanda a nivel mundial.
  3. Motor de base de datos por excelencia utilizado en grandes

    compañías a nivel mundial gracias a su robusta infraestructura y estabilidad absoluta que le permite a las empresas proteger su recurso más valioso: la información.
  4. Preparación del entorno de trabajo. Requisitos: 3 Exige PHP 5.5.9

    o superior. Asegúrate de disponer de una versión actualizada de PHP correctamente. Gestor de paquetes utilizado por todas las aplicaciones PHP modernas, incluyendo Symfony. Composer es imprescindible para cualquier programador PHP, ya que permite instalar, actualizar y desinstalar librerías, paquetes y plugins, normalmente llamadas dependencias.
  5. Uno de los mejores IDE de desarrollo para PHP, además

    cuenta con un plugin bastante potente que automatizará en gran medida nuestras tareas más comunes en el código. Poderosa herramienta de gestión y diseño de bases de datos. Con una interfaz gráfica intuitiva para que el usuario administre de forma fácil sus bases de datos además de contar con aplicación para celular. Navicat
  6. Permite La Comunicación de nuestra aplicación PHP con la base

    de datos Oracle. Fuente Instalación: http://www.oracle.com/technetwork/es/arti cles/dsl/instalacion-php-con-instant-client -2106535-esa.html Librería OCI8
  7. Descripción del Proyecto La mejor forma de probar las funcionalidades

    de este poderoso Framework es construyendo una aplicación real, por tal motivo nos daremos a la tarea de contruir una aplicación para manejar los items de venta de una compañía. Con sus respectivas tablas relacionadas y el procedimiento para añadir, visualizar, editar y eliminar información.Todo esto en una interfaz gráfica amigable al usuario.
  8. Instalando Symfony3 El proyecto Symfony ha publicado una herramienta llamada

    Instalador de Symfony que simplifica al máximo la creación de nuevas aplicaciones Symfony. sudo mkdir -p /usr/local/bin sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony sudo chmod a+x /usr/local/bin/symfony
  9. Una vez disponible el instalador de Symfony, puedes crear aplicaciones

    Symfony ejecutando un solo comando sencillo: Nos dirigimos al directorio donde queremos instalar nuestra aplicación: cd /var/www/html/ symfony new inventario 3.1 cd inventario/ composer update
  10. Con guración de los parámetros de Conexión. Aspectos a tener

    en cuenta con Oracle. En nuestro archivo de configuración app/config.php configuramos nuestra driver a utilizar en este caso oci8: driver: oci8 Configuramos el servicio Listener para nuestra conexión: services: my.listener: class: Doctrine\DBAL\Event\Listeners\OracleSessionInit tags: - { name: doctrine.event_listener, event: postConnect }
  11. En el archivo app/parameters.yml configuramos los parámetros de conexión a

    la base de datos Oracle: parameters: database_host: 172.26.6.5 database_port: null database_name: ORCL database_user: USER database_password: PASSWORD Ubicados en el directorio procedemos a crear el bundle que contendrá nuestra aplicación: php bin/console generate:bundle
  12. Diseñando la base de datos en Oracle Ingresamos a la

    herramienta navicat y seleccionamos la conexión oracle, a continuación este script nos permitirá crear un nuevo esquema en nuestra base de datos: CREATE USER "INVENTARIO" PROFILE "DEFAULT" IDENTIFIED BY "INVENTARIO01" DEFAULT TABLESPACE "INVENTARIO" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT DBA TO INVENTARIO; GRANT "CONNECT" TO "INVENTARIO"; GRANT "RESOURCE" TO "INVENTARIO";
  13. GRANT ALTER ANY INDEX TO "INVENTARIO"; GRANT ALTER ANY SEQUENCE

    TO "INVENTARIO"; GRANT ALTER ANY TABLE TO "INVENTARIO"; GRANT ALTER ANY TRIGGER TO "INVENTARIO"; GRANT CREATE ANY INDEX TO "INVENTARIO"; GRANT CREATE ANY SEQUENCE TO "INVENTARIO"; GRANT CREATE ANY SYNONYM TO "INVENTARIO"; GRANT CREATE ANY TABLE TO "INVENTARIO"; GRANT CREATE ANY TRIGGER TO "INVENTARIO"; GRANT CREATE ANY VIEW TO "INVENTARIO"; GRANT CREATE PROCEDURE TO "INVENTARIO"; GRANT CREATE PUBLIC SYNONYM TO "INVENTARIO"; GRANT CREATE TRIGGER TO "INVENTARIO";
  14. GRANT CREATE VIEW TO "INVENTARIO"; GRANT DELETE ANY TABLE TO

    "INVENTARIO"; GRANT DROP ANY INDEX TO "INVENTARIO"; GRANT DROP ANY SEQUENCE TO "INVENTARIO"; GRANT DROP ANY TABLE TO "INVENTARIO"; GRANT DROP ANY TRIGGER TO "INVENTARIO"; GRANT DROP ANY VIEW TO "INVENTARIO"; GRANT INSERT ANY TABLE TO "INVENTARIO"; GRANT QUERY REWRITE TO "INVENTARIO"; GRANT SELECT ANY TABLE TO "INVENTARIO"; GRANT UNLIMITED TABLESPACE TO "INVENTARIO";
  15. Con la herramienta Navicat la tarea de crear tablas con

    sus respectivas llaves foráneas es muy sencilla. A continuación crearemos el siguiente esquema:
  16. Generando entidades a partir de la base de datos Oracle.

    En ocasiones necesitamos empezar nuestra aplicación desde un modelo de base de datos existente y Doctrine cuenta con herramientas que harán agíl el proceso de generación de entidades desde la base de datos: Generamos los archivos de metadatos correspondientes con el siguiente comando: php bin/console doctrine:mapping:convert xml ./src/Proyecto/InventarioBundle/Resources/config/doctrine/metadata /orm --from-database --force
  17. Ya que hemos generado los archivos de metadatos correspondientes procedemos

    a generar las entidades: php app/console doctrine:mapping:import ProyectoInventarioBundle annotation Luego procedemos a crear nuestras entities (Métodos GET Y SET) para nuestras entidades: php app/console doctrine:generate:entities ProyectoInventarioBundle Vamos a la carpeta de entidades de nuestro proyecto src/Proyecto/Inventario/Entity y nos encontramos nuestras entidades.
  18. El siguiente paso es crear los métodos __toString que permite

    a una clase decidir cómo comportarse cuando se le trata como un string. Esto para los formularios de la aplicación En la Entidad Categoria.php public function __toString() { return $this->getCategoria(); } En la Entidad Subcategoria.php public function __toString() { return $this->getSubcategoria(); }
  19. Usuarios y permisos con FOSUserBundle FOSUserBundle nos provee de un

    sistema de seguridad bastante robusto basado en el componente de seguridad de Symfony con una configuración bastante frexible y rapida que nos permitirá automatizar tareas de como: Registro de nuevos usuarios Configuración de niveles de acceso Habilitar / deshabilitar usuario Asignar roles y grupos Opciones para recordar contraseña Guardar los usuarios en la base de datos Sistema de encriptación de contraseñas
  20. Manos a la obra Habilitar los textos de la traducción

    en nuestro archivo de configuración app/config.php framework: translator: ~ Descargamos FOSUserBundle mediante Composer composer require friendsofsymfony/user-bundle "~2.0@dev" En el archivo /app/AppKernel.php Habilitamos el bundle: new FOS\UserBundle\FOSUserBundle(),
  21. Creamos la clase Usuario.php que nos permitirá administrar nuestros Usuarios

    de la aplicación: <?php namespace Proyecto\InventarioBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="USUARIO") */ class Usuario extends BaseUser { /**
  22. Creamos la clase Usuario.php que nos permitirá administrar nuestros Usuarios

    de la aplicación: <?php namespace Proyecto\InventarioBundle\Entity; use FOS\UserBundle\Model\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="USUARIO") */ class Usuario extends BaseUser { /**
  23. Configuramos la seguridad de nuestra aplicación en el archivo app/scurity.yml,

    este es un ejemplo de configuración mínima: security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: fos_userbundle: id: fos_user.user_provider.username
  24. rewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager #

    if you are using Symfony < 2.8, use the following config instead: # csrf_provider: form.csrf_provider logout: true anonymous: true
  25. access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - {

    path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_USER }
  26. Añadimos las rutas necesarias de Fosuser al archivo app/routing.yml: fos_user:

    resource: "@FOSUserBundle/Resources/config/routing/all.xml" Y por último actualizamos nuestra base de datos: new FOS\UserBundle\FOSUserBundle(), Probamos el funcionamiento creando un nuevo usuario con su respectiva contraseña.
  27. Generando el crud con Admin Generator Para generar el crud

    utilizaremos el bundle EasyAdmin que permite la creación de backends de forma realmente sencilla y con una interfaz muy amigable al usuario: Manos a la Obra: Descargamos el Bundle Mediante Composer: composer require javiereguiluz/easyadmin-bundle Habilitamos el bundle en nuestro archivo: app/AppKernel.php new JavierEguiluz\Bundle\EasyAdminBundle\EasyAdminBundle(),
  28. Cargamos las Rutas del Bundle: easy_admin_bundle: resource: "@EasyAdminBundle/Controller/" type: annotation

    pre x: /admin Instalamos los assets necesarios creando un enlace simbólico: php bin/console assets:install --symlink
  29. En nuestro archivo app/config.yml configuramos las entidades que queremos sean

    administradas en nuestro backend: easy_admin: entities: - Proyecto\InventarioBundle\Entity\Subcategoria - Proyecto\InventarioBundle\Entity\Categoria - Proyecto\InventarioBundle\Entity\Item
  30. Poniendo en marcha la aplicación Desde ahora podemos acceder a

    nuestro backen /admin proporcionando los datos de usuario y contraseña. ¡ Veamos su funcionamiento !