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...