Mi primer aplicación en Symfony 2



Mi primer aplicación en Symfony 2

0 0


PresentacionSfD


On Github jatempa / PresentacionSfD

Mi primer aplicación en Symfony 2

Drupal Camp México 2014

Jorge Antonio Atempa Camacho / @atempa09

Estudiante de Maestría en Ingeniería Electrónica en el Instituto Tecnológico de Mexicali.

Contenido

  • Introducción
  • Objetivo
  • Instalación y configuración de Symfony 2
  • Mi primer Bundle
  • Base de datos con Doctrine
  • Motor de plantillas Twig
  • Integración con un Framework CSS
  • Caso de estudio: Página web para el área de posgrado del ITM

Introducción

Symfony 2

Es un framework para el desarrollo de aplicaciones web en lenguaje PHP. Genéricamente, un framework es un conjunto de herramientas, librerías, convenciones y buenas prácticas que pretenden encapsular las tareas repetitivas en módulos genéricos fácilmente reutilizables.

Modelo-Vista-Controlador

Objetivo

Objetivo

Desarrollar una aplicación con base de datos y con la capacidad de realizar operaciones CRUD (Create-Read-Update-Delete).

Aplicación demo:

https://github.com/jatempa/SymfonyDayDemo.git

Instalación y configuración

Requerimientos

						
						1. $ sudo apt-get install apache2 mysql-server php5
						
						
						2. $ sudo apt-get install git-core curl
						
						
						3. $ sudo apt-get install php-apc php5-intl php5-mysql
						
					

Composer

Es una herramienta para gestionar las dependencias de proyectos desarrollados en PHP. La instalación mediante Composer, es la forma recomendada oficialmente.

Composer

						
						1. $ curl -s https://getcomposer.org/installer | php
						
						
						2. $ sudo mv composer.phar /usr/local/bin/composer
						
						
						3. $ composer
						
					

Instalación

						
						$ composer create-project symfony/framework-standard-edition "directorio" 2.3.x-dev
						
					

Estructura de directorios

  • app: contiene los archivos de configuración, la cache, los logs y los recursos globales.
  • src: aquí se encuentra todo el código PHP de la aplicación.
  • vendor: por convención aquí se guardan todas las librerías creadas por terceros.
  • web: este es el directorio web raíz y contiene todos los archivos que se pueden acceder públicamente.

Mi Primer Bundle

¿Que es un Bundle?

Un bundle es un concepto similar al de los plugins en otras aplicaciones, pero todavía mejor. La diferencia clave es que en Symfony todo es un bundle, incluyendo tanto la funcionalidad básica de la plataforma como el código escrito para tu aplicación.

Métodos para crear un Bundle

						
						1. $ php app/console generate:bundle
						
						
						2. $ php app/console generate:bundle --namespace=Acme/Bundle/BlogBundle
						
						
						3. $ php app/console generate:bundle --bundle-name=AcmeBlogBundle
						
						
						4. $ php app/console generate:bundle --dir=/var/www/myproject/src
						
						
						5. $ php app/console generate:bundle --format=annotation
						
					

Métodos para crear un Bundle

						
						$ php app/console generate:bundle --namespace=ITM/AlumnosBundle --bundle-name=AlumnosBundle --dir=src/ --format=yml --no-interaction
						
						
						$ php app/console generate:bundle --namespace=ITM/CarrerasBundle --bundle-name=CarrerasBundle --dir=src/ --format=yml --no-interaction
						
					

En el repositorio:

						
						$ git checkout parte-1
						
						

Base de datos con Doctrine

Doctrine

Doctrine es un ORM (Object Relational Mapper), escrito en PHP. Un ORM, es un mecanismo que permite comunicar dos sistemas distintos, típicamente una base de datos relacional con objetos de un lenguaje orientado a objetos.

Doctrine

Con el apoyo de Doctrine, Symfony integra comandos para trabajar con base de datos:

						
/* Crear una base de datos */
$ php app/console doctrine:database:create

/* Eliminar una base de datos */
$ php app/console doctrine:database:drop --force

/* Crear un esquema de base de datos */
$ php app/console doctrine:schema:create

/* Presentar la serie de consultas SQL necesarias para realizar una acción. */
$ php app/console doctrine:schema:create --dump-sql

/* Eliminar un esquema de base de datos */
$ php app/console doctrine:schema:drop --force

/* Actualizar un esquema de base de datos */
$ php app/console doctrine:schema:update

/* Generar un CRUD a partir de una entidad */
$ php app/console doctrine:generate:crud
						
					

Entidades

Una manera de generar las entidades en Symfony automáticamente es la siguiente:

						
$ php app/console doctrine:generate:entity --entity="AlumnosBundle:Alumnos" --fields="nocontrol:string(15) nombre:string(36) apellido_paterno:string(45) apellido_materno:string(45) carrera:int(11)" --no-interaction
						
					
						
$ php app/console doctrine:generate:entity --entity="CarrerasBundle:Carreras" --fields="nombre:string(60)" --no-interaction

						
					

Esquema de base de datos

Entidades

Establecer manualmente la relación entre las entidades.

						
...

/**
 * Alumnos
 *
 * @ORM\Table("alumnos")
 * @ORM\Entity
 */
class Alumnos
{
    ...

    /**
     * @ORM\ManyToOne(targetEntity="ITM\CarrerasBundle\Entity\Carreras")
     * @ORM\JoinColumn(name="carrera", referencedColumnName="id")
     */
    private $carrera;
}
						
					

Entidades

Modificar los métodos get y set:

						
...

class Alumnos
{
    ...

    /**
     * Set carrera
     *
     * @param \ITM\CarrerasBundle\Entity\Carreras $carrera
     * @return Alumnos
     */
    public function setCarrera(\ITM\CarrerasBundle\Entity\Carreras $carrera)
    {
        $this->carrera = $carrera;
    }

    /**
     * Get carrera
     *
     * @return \ITM\CarrerasBundle\Entity\Carreras
     */
    public function getCarrera()
    {
        return $this->carrera;
    }

    ...
}
						
					

Entidades

Agregar el método mágico toString()

						
/**
 * Carreras
 *
 * @ORM\Table("carreras")
 * @ORM\Entity
 */
class Carreras
{   
    ...
    
    public function __toString()
    {
		return $this->getNombre();
    }
}
						
					

En el repositorio:

						
						$ git checkout parte-2
						
						

Create Read Update Delete

Generando un controlador CRUD basado en una entidad de Doctrine.

						
						$ php app/console doctrine:generate:crud
						
					

En el repositorio:

						
						$ git checkout parte-3
						
						

Datos de prueba

DataFixtures Bundle

Agregar en el archivo composer.json lo siguiente:

						
"require": {
    ...

    "doctrine/doctrine-fixtures-bundle": "dev-master",
    "doctrine/data-fixtures": "dev-master"
},
						
					

Actualizar composer.json:

						
						$ composer update
						
						

DataFixtures Bundle

Registrar en el AppKernel.

						
public function registerBundles()
{
    $bundles = array(
    ...

    new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
);
						
					

Cargar datos de prueba:

						
						$ php app/console d:f:l
						
						

En el repositorio:

						
						$ git checkout parte-4
						
						

Motor de plantillas Twig

Twig

Twig

Plantilla A

Plantilla B

Plantilla base

Twig

Twig

Twig

Twig

Twig

Twig

Twig

Integración con un Framework CSS

Framework CSS

Un framework CSS es un conjunto de herramientas, hojas de estilos y buenas prácticas que permiten al diseñador web olvidarse de las tareas repetitivas para centrarse en los elementos únicos de cada diseño en los que puede aportar valor.

Foundation Framework

Integración de Foundation en Symfony 2

En src/ITM/AlumnosBundle/Resources crea la carpeta de public Descomprime el paquete de foundation-5.2.x.zip Pega las carpetas de css, images y js dentro de public Para registrar los estilos en tu aplicación utiliza el siguiente comando:
								
$ php app/console assets:install
								
							
Para heredar de la plantilla css utiliza la siguiente línea desde tu plantilla app/Resources/views/frontend.twig.html
								
									
							

En el repositorio:

						
						$ git checkout parte-5
						
						

Modelo-Vista-Controlador

Página web para el área de posgrado del ITM

Objetivo

Desarrollar la página web de la División de Estudios de Posgrado e Investigación. Utilizando el patrón de arquitecturaModelo-Vista-Controlador (MVC).

Actualmente

Referencias

Página oficial

Libro de Javier Eguiluz

Por su atención

Muchas Gracias !!!