Un vistazo rápido

Transcripción

Un vistazo rápido
Un vistazo rápido
Master Class
Symfony
Agenda
l
Agenda
l
Introducción
l
l
l
l
Fundamentos Symfony2.
l
l
l
l
l
¿Qué es Symfony?
Un poco de historia.
¿Donde encontrar documentación?
Herramientas
Controlador
Modelo: Doctrine
Vista: Twig
Preguntas
Symfony
Un vistazo rápido
Master class
Introduction
Symfony
Introducción
¿Que es Symfony?
Framework PHP que implementa MVC
Software libre (licencia MIT)
Desarrollo de aplicaciones y páginas web complejas
Fácil de instalar y configurar en la mayoría de plataformas
Más eficiente y optimizado que otros frameworks PHP como Zend
Desarrollo más costoso, mantenimiento más sencillo
Autodocumentado (código legible y fácil de mantener)
Curva de aprendizaje pronunciada
Symfony
Introducción
¿Que es Symfony? (ii)
Diseño basado en componentes (bundles), muy potente pero muy flexible
Permite incorporar componentes y herramientas de terceros: bundles
Sigue la mayoría de buenas prácticas y patrones de diseño para la web
Usa características avanzadas de POO de PHP 5.3 (namespaces)
Independiente del sistema gestor de bases de datos
Fácil localización e internacionalización
Comunidad muy activa
Symfony
Introducción
Un poco de historia
Desarrollado por Fabien Potencier en 2005
Liberado en 2007 (Symfony 1.0)
Mantenido actualmente por SensioLabs
Versión recomendada: 2.3 LTS de Mayo 2013 (soporte 3 años)
La última versión actualmente es la 2.5 de Mayo de 2014
Se está preparando la versión 2.6
Problemas de retrocompatibilidad entre versiones
Symfony
Introducción
¿Donde encontrar documentación?
http://symfony.com/
La web oficial
Sólo en inglés
http://symfony.es/
blog de Javier Eguiluz
Libro: Desarrollo web ágil con Symfony2
Autor: Javier Eguiluz
Libro: Symfony2 el libro oficial
http://symfony.com/doc/2.3/book/index.html (Inglés)
http://librosweb.es/symfony_2_3/ (Castellano)
Autores: Fabien Potencier, Ryan Weaver
Traducido por Javier Eguilux
Symfony
Un vistazo rápido
Master class
Un vistazo rápido a Symfony2
Symfony
Fundamentos de Symfony2
Herramientas
Composer
Herramienta para gestionar dependencias en aplicaciones PHP
Descarga en instala automáticamente las versiones correctas de las librerías
Componente externo usado por Symfony (licencia MIT)
Console
Herramienta para realizar multitud de operaciones sobre Symfony.
Limpiar la caché; crear bundles, entidades, formularios, …; depurar rutas, etc.
Permite definir herramientas nuevas.
Symfony
Fundamentos de Symfony2
Composer: ejemplo
Symfony
Fundamentos de Symfony2
Console: ejemplo
Symfony
Fundamentos de Symfony2
Organización de archivos
+ app
+ cache
+ config
+ logs
+ Resources
+ public
+ translations
+ views
+ console
+ vendor
+ web
+ app.php
+ app_dev.php
+ composer.json
+ composer.lock
+ src
+ Acme
+ DemoBundle
+ Comand
+ Controller
+ DependencyInjection
+ Entity
+ Form
+ Resources
+ config
+ public
+ translations
+ views
+ Tests
Symfony
Fundamentos de Symfony2
Controlador
Controlador frontal
Procesa todas las peticiones de usuario e interpreta las rutas
Llama a la clase controladora y acción adecuadas
Puede haber más de un controlador frontal: app.php, app_dev.php, etc.
Clases controladoras y acciones
Son los verdaderos controladores del modelo MVC
Heredan de la clase Controller.
Los métodos públicos son acciones que devuelven objetos Response.
Symfony
Fundamentos de Symfony2
Controlador
Ejemplo de controlador:
namespace Acme\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DemoController extends Controller
{
public function indexAction($name)
{
return new Response(
'<html><body>Hello ' . $name . '!</body></html>'
);
}
}
Symfony
Fundamentos de Symfony2
Controlador
Rutas: Symfony soporta múltiples formas de asociar las rutas a las acciones de los
controladores: Yaml, XML, anotaciones, etc.
Ejemplo de rutas con Yaml:
# app/config/routing.yml
demo:
path:
/demo/{name}
defaults:
{ _controller: AcmeDemoBundle:Demo:index }
Ejemplo de rutas con XML:
<!-- app/config/routing.xml -->
<route id="demo" path="/demo/{name}">
<default key="_controller">AcmeDemoBundle:Demo:index</default>
</route>
Symfony
Fundamentos de Symfony2
Controlador
Rutas:
Ejemplo de rutas con anotaciones:
class DemoController extends Controller
{
/**
* @Route("/demo/{name}", name="demo")
*/
public function indexAction($name)
{
// ...
}
}
Symfony
Fundamentos de Symfony2
Controlador
Funcionamiento del sistema de rutas en Symfony:
Symfony
Fundamentos de Symfony2
Modelo
Doctrine:
Por defecto Symfony2 usa Doctrine para la capa del modelo en el esquema MVC pero como
tantos otros componentes, su uso es opcional, pudiendo ser sustituido por otros componentes.
Doctrine es un componente externo sin relación con Symfony, pero es el más utilizado por su
buena integración y porque viene configurado por defecto en la instalación estándar.
Doctrine es un ORM (Object Relational Model). Es decir permite mapear de forma sencilla
entidades de base de datos con clases PHP.
Además Doctrine se utiliza como capa de persistencia de base de datos. Esto es que permite
crear, modificar y borrar información en la base de datos a través de los objetos PHP.
Symfony
Fundamentos de Symfony2
Modelo
Configurando Doctrine:
Como en los demás casos hay varias formas de configurar los parámetros de la base de datos
para Doctrine, pero aquí pongo la que más se suele utilizar.
# app/config/parameters.yml
parameters:
database_driver:
pdo_mysql
database_host:
localhost
database_name:
test_project
database_user:
root
database_password: password
Esto configura Doctrine para usar una base de datos MySQL llamada “test_project”, indicando
que el usuario es “root” y la clave de acceso “password”.
Symfony
Fundamentos de Symfony2
Modelo
Ejemplo de entidad Doctrine:
namespace Acme\StoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
Symfony
Fundamentos de Symfony2
Modelo
Ejemplo de entidad Doctrine (II):
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
}
Como de costumbre hay otras formas además de las anotaciones de mapear el objeto PHP con
la entidad de base de datos (Yaml, XML, …). Aquí he puesto las anotaciones porque se ve muy
claro. Sin embargo en un mismo bundle no se puede diferentes formas de definir los metadatos.
Symfony
Fundamentos de Symfony2
Modelo
Ejemplo de entidad Doctrine (III):
Imaginemos que tenemos otra entidad Category (campos: id, name) y queremos que nuestro
producto tenga una clave foránea con categoría. Para hacerlo bastaría añadir el siguiente
código a nuestra entidad Product.
class Product
{
//...
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
}
Symfony
Fundamentos de Symfony2
Modelo
Ejemplo de entidad Doctrine (IV):
Por su parte en la entidad Category podemos crear la relación inversa con Product.
class Category
{
//...
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
}
Symfony
Fundamentos de Symfony2
Modelo
Ejemplo de persinstencia en Doctrine:
namespace Acme\StoreBundle\Controller;
use ...
class StoreController extends Controller
{
public function createAction()
{
$product = new Product();
$product->setName('Pencil');
$product->setPrice(0.80);
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
// ...
Symfony
Fundamentos de Symfony2
Vista
Twig:
Por defecto Symfony2 usa Twig como motor de plantillas para generar las vistas pero por
supuesto su uso es opcional.
Twig es un componente externo a Symfony, pero desarrollado por la propia SensioLabs,
pudiendo usarse también de forma independiente a Symfony.
Twig es básicamente código HTML5 con etiquetas especiales que son traducidas por el
servidor:
{{ ... }} sirve procesar variables y expresiones
{% ... %} sirve para añadir lógica a la plantilla con instrucciones if, while, for, etc.
{# ... #} sirve para añadir comentarios
Symfony
Fundamentos de Symfony2
Vista
Ejemplo de Twig:
<!DOCTYPE html>
<html>
<head>
<title>{{ doc_title }}</title>
</head>
<body>
<h1>{{ page_title }}</h1>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
</body>
</html>
Symfony
Un vistazo rápido
Gracias
por su atención...

Documentos relacionados