SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
INTRODUCCIÓN Al
FRAMEWORK
Alejandro Hernández (@aleherse)
Desarrollador de aplicaciones web, consultor y formador.
Trabaja actualmente en un juego web de estrategia por turnos
ambientado en la antigua Grecia (+info: about.me/aleherse)
¿Qué es un framework?
"Un framework para aplicaciones web es un framework
diseñado para apoyar el desarrollo de sitios web ...
intenta aliviar el exceso de carga asociado con
actividades comunes ... Por ejemplo, muchos
framework proporcionan bibliotecas para acceder a
bases de datos, estructuras para plantillas ... y con
frecuencia facilitan la reutilización de código."
— Wikipedia
¿Qué es symfony? (1/2)
Según palabras de su creador Fabien Potencier:
• Symfony2 is a reusable set of standalone, decoupled, and
cohesive PHP components that solve common web
development problems.
• Symfony2 is also a full-stack web framework.
• Symfony2 is an HTTP framework; it is a Request/Response
framework.
¿Qué es symfony? (2/2)
• Es un framework para aplicaciones web escrito en PHP.
• Un conjunto de componentes, más de 30.
• Una metodología.
• Open Source MIT License y una empresa detrás SensioLabs.
• Comunidad 300.000 desarrolladores en +120 paises.
• Usuarios +500.000.000 de descargas.
Symfony Roadmap. Releases
• Una versión menor cada 6 meses (2.7, 2.8).
• Una versión mayor cada 2 años (3.0).
Symfony Roadmap. Development
• 4 meses añadiendo características y mejoras.
• 2 meses de estabilización y corrección de errores.
Symfony Roadmap. Maintenance
• Versión estándar (3.1)
• 8 meses corrigiendo errores.
• 14 meses corrigiendo problemas de seguridad.
• Versión con soporte a largo plazo LTS (2.8)
• 3 años corrigiendo errores.
• 4 años corrigiendo problemas de seguridad.
Instalación
• Usando el instalador oficial
$ sudo curl -LsS https://symfony.com /installer -o /usr/local/bin/symfony
$ sudo chmod a+x /usr/local/bin/symfony
$ symfony new blog 3.1
• Usando composer
$ composer create-project symfony/framework-standard-edition blog "3.1"
Configuración
Arrancar el servidor
$ cd blog/
$ php bin/console server:run
Configuración: http://localhost:8000/config.php
Homepage: http://localhost:8000/
Development: http://localhost:8000/app_dev.php
REQUEST RESPONSE
Request
Objeto que encapsula las variables super globales de PHP
$request = Request::createFromGlobals();
$request = new Request(
$_GET,
$_POST,
array(),
$_COOKIE,
$_FILES,
$_SERVER
);
Response
Objeto que encapsula toda la información que necesita el
cliente
$response = new Response(
'<html><body>Hello world!</body></html>',
Response::HTTP_OK,
array('content-type' => 'text/html')
);
REQUEST ROUTER RESPONSE
Router
Asocia una URL con una acción de un controlador
/blog/2 /blog/{page} function viewAction($page) {...}
REQUEST ROUTER CONTROLLER/ACTION RESPONSE
Controller/Action (1/2)
Contiene funciones PHP que leen información de la Request y
devuelven un objeto response
$ php bin/console generate:controller
> AppBundle:Blog
> ...
Controller/Action (2/2)
/**
* @Route("/", name="post_list")
*/
public function listAction()
{
return $this->render('AppBundle:Blog:list.html.twig', array(
// ...
));
}
REQUEST ROUTER CONTROLLER/ACTION TEMPLATE
RESPONSE
Template
Symfony hace uso del motor de plantillas Twig
• Rápido: Las plantillas son compiladas a código PHP
• Seguro: El código generado es evaluado y confiable
• Flexible: Crea tus propias etiquetas y filtros
REQUEST ROUTER CONTROLLER/ACTION MODEL
TEMPLATE RESPONSE
Model: Library (1/5)
Doctrine 2 es una librería de mapeo objeto-relacional (ORM)
para PHP 5.4+ que proporciona, de forma transparente,
persistencia de objetos PHP. Utiliza el patrón Data Mapper.
Propel 2 es una alternativa que utiliza el patrón Active Record.
app/config/config.yml
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
Model: Configuration (2/5)
Configuración de la conexión con la base de datos
app/config/parameters.yml
parameters:
database_host: 127.0.0.1
database_port: 3306
database_name: blog
database_user: admin
database_password: password
Model: Entity (3/5)
$ php bin/console doctrine:database:create
$ php bin/console doctrine:generate:entity
> AppBundle:Post
> ...
> Generating entity class src/AppBundle/Entity/Post.php: OK!
> Generating repository class src/AppBundle/Repository/PostRepository.php: OK!
$ php bin/console doctrine:schema:create
Model: Action (4/5)
$posts = $this->getDoctrine()
->getRepository(Post::class)
->findAll();
return $this->render(
'AppBundle:Blog:list.html.twig',
array(
'posts' => $posts
)
);
Model: View (5/5)
{% extends "::base.html.twig" %}
{% block title %}Mi blog{% endblock %}
{% block body %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
{% else %}
<p>No se han encontrado posts</p>
{% endfor %}
{% endblock %}
REQUEST ROUTER CONTROLLER/ACTION MODEL FORM
TEMPLATE RESPONSE
Form: Type (1/3)
Symfony integra un componente que facilita el trabajo con
formularios HTML
$ php bin/console doctrine:generate:form AppBundle:Post
$builder
->add('title')
->add('content')
->add('status', ChoiceType::class, array(
'choices' => array('borrador' => 0, 'Publicado' => 1),))
->add('guardar', SubmitType::class);
Form: Action (2/3)
$form = $this->createForm(PostType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$manager = $this->getDoctrine()->getManager();
$manager->persist($form->getData());
$manager->flush();
return $this->redirectToRoute("add_post");
}
return $this->render('AppBundle:Blog:add.html.twig', array(
'form' => $form->createView()
));
Form: View (3/3)
{% extends "::base.html.twig" %}
{% block title %}Añadir post{% endblock %}
{% block body %}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endblock %}
REQUEST ROUTER SECURITY CONTROLLER/ACTION
MODEL FORM TEMPLATE RESPONSE
Security (1/2)
Si una request referencia a un área protegida:
• Extraer token con credenciales de la request
• Validar token y devolver un token autenticado
• Guardar el token autenticado
• Permitir el acceso
Security (2/2)
providers:
in_memory:
memory:
users:
admin:
password: password
roles: 'ROLE_ADMIN'
encoders:
SymfonyComponentSecurityCoreUserUser: plaintext
firewalls:
main:
anonymous: ~
http_basic: ~
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
A tener en cuenta
• Symfony es muy potente y este ejemplo muy simple
• El controlador por defecto contiene mucha magia
• Crea servicios y no pongas negocio en el controlador
• Seguro que hay un bundle para eso (packagist.org)
• No tengas miedo en navegar por el código de Symfony
¿Por dónde continuar?
• Documentación (symfony.com/doc/current)
• Best Practices (symfony.com/doc/current/best_practices)
• Bundles (symfony.com/doc/bundles)
• Desarrollo web ágil con Symfony2 (symfony.es/libro)
• Charlas SensioLabs (youtube.com/user/SensioLabs)
• Charlas deSymfony (youtube.com/user/desymfony)
Enlaces de interés
• http://symfony.com
• http://silex.sensiolabs.org
• http://fabien.potencier.org/what-is-symfony2.html
• https://github.com/symfony/symfony-demo
• http://twig.sensiolabs.org
• http://symfony.es
• http://sylius.org
¿Preguntas?

Más contenido relacionado

La actualidad más candente

Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroEduardo Turiño
 
Silex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender SymfonySilex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender SymfonyRyan Weaver
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016Agencia INNN
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHPAlicantePHP
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfonysymfony_bcn
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVCAsier Marqués
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 
Convierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeConvierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeJoan Artés
 
Presentacion remobjects
Presentacion remobjectsPresentacion remobjects
Presentacion remobjectsmamcx
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSJavier Abadía
 
7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el diaFrancisco Aranda
 

La actualidad más candente (20)

Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde Cero
 
Silex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender SymfonySilex: Microframework y camino fácil de aprender Symfony
Silex: Microframework y camino fácil de aprender Symfony
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
Webperf wordpress
Webperf wordpressWebperf wordpress
Webperf wordpress
 
Hola RoR
Hola RoRHola RoR
Hola RoR
 
Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVC
 
Meetup V.E.No.M. y docker
Meetup V.E.No.M. y dockerMeetup V.E.No.M. y docker
Meetup V.E.No.M. y docker
 
Webutil
WebutilWebutil
Webutil
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
Convierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React NativeConvierte tu WordPress en una app con React Native
Convierte tu WordPress en una app con React Native
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Presentacion remobjects
Presentacion remobjectsPresentacion remobjects
Presentacion remobjects
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 

Similar a Introducción al framework Symfony

Clase 2 conceptos fundamentales
Clase 2   conceptos fundamentalesClase 2   conceptos fundamentales
Clase 2 conceptos fundamentaleshydras_cs
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controllerhydras_cs
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2Raul Fraile
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosJavier Eguiluz
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfRaaulroodriguez
 
Directorio betabeers - symfony madrid
Directorio betabeers - symfony madridDirectorio betabeers - symfony madrid
Directorio betabeers - symfony madridbetabeers
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...betabeers
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPSebastián Joya
 
Presentacion
PresentacionPresentacion
PresentacionEl Jota
 
Frameworks para Php Adwa
Frameworks para Php AdwaFrameworks para Php Adwa
Frameworks para Php AdwaAndres Karp
 
Framework kahana
Framework kahanaFramework kahana
Framework kahanaH31D1
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleArmando Nuñez Ramos
 
Laboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoLaboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoFelipe Moreno
 

Similar a Introducción al framework Symfony (20)

Clase 2 conceptos fundamentales
Clase 2   conceptos fundamentalesClase 2   conceptos fundamentales
Clase 2 conceptos fundamentales
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controller
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)Programación de Componentes para Joomla (Gabriel Cuesta)
Programación de Componentes para Joomla (Gabriel Cuesta)
 
Directorio betabeers - symfony madrid
Directorio betabeers - symfony madridDirectorio betabeers - symfony madrid
Directorio betabeers - symfony madrid
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
 
Sesión Virtual
Sesión VirtualSesión Virtual
Sesión Virtual
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHP
 
PHP en el 2015
PHP en el 2015PHP en el 2015
PHP en el 2015
 
Presentacion
PresentacionPresentacion
Presentacion
 
Frameworks para Php Adwa
Frameworks para Php AdwaFrameworks para Php Adwa
Frameworks para Php Adwa
 
Framework kahana
Framework kahanaFramework kahana
Framework kahana
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y Google
 
Laboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoLaboratorio 3 Andres Moreno
Laboratorio 3 Andres Moreno
 
Symfony Parte 2
Symfony Parte 2Symfony Parte 2
Symfony Parte 2
 

Último

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Luis Olivera
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 

Último (20)

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
Clase N°4 - Purificación y secuenciación de acidos nucleicos Benoit Diringer ...
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 

Introducción al framework Symfony

  • 2. Alejandro Hernández (@aleherse) Desarrollador de aplicaciones web, consultor y formador. Trabaja actualmente en un juego web de estrategia por turnos ambientado en la antigua Grecia (+info: about.me/aleherse)
  • 3. ¿Qué es un framework? "Un framework para aplicaciones web es un framework diseñado para apoyar el desarrollo de sitios web ... intenta aliviar el exceso de carga asociado con actividades comunes ... Por ejemplo, muchos framework proporcionan bibliotecas para acceder a bases de datos, estructuras para plantillas ... y con frecuencia facilitan la reutilización de código." — Wikipedia
  • 4. ¿Qué es symfony? (1/2) Según palabras de su creador Fabien Potencier: • Symfony2 is a reusable set of standalone, decoupled, and cohesive PHP components that solve common web development problems. • Symfony2 is also a full-stack web framework. • Symfony2 is an HTTP framework; it is a Request/Response framework.
  • 5. ¿Qué es symfony? (2/2) • Es un framework para aplicaciones web escrito en PHP. • Un conjunto de componentes, más de 30. • Una metodología. • Open Source MIT License y una empresa detrás SensioLabs. • Comunidad 300.000 desarrolladores en +120 paises. • Usuarios +500.000.000 de descargas.
  • 6. Symfony Roadmap. Releases • Una versión menor cada 6 meses (2.7, 2.8). • Una versión mayor cada 2 años (3.0).
  • 7. Symfony Roadmap. Development • 4 meses añadiendo características y mejoras. • 2 meses de estabilización y corrección de errores.
  • 8. Symfony Roadmap. Maintenance • Versión estándar (3.1) • 8 meses corrigiendo errores. • 14 meses corrigiendo problemas de seguridad. • Versión con soporte a largo plazo LTS (2.8) • 3 años corrigiendo errores. • 4 años corrigiendo problemas de seguridad.
  • 9.
  • 10. Instalación • Usando el instalador oficial $ sudo curl -LsS https://symfony.com /installer -o /usr/local/bin/symfony $ sudo chmod a+x /usr/local/bin/symfony $ symfony new blog 3.1 • Usando composer $ composer create-project symfony/framework-standard-edition blog "3.1"
  • 11. Configuración Arrancar el servidor $ cd blog/ $ php bin/console server:run Configuración: http://localhost:8000/config.php Homepage: http://localhost:8000/ Development: http://localhost:8000/app_dev.php
  • 13. Request Objeto que encapsula las variables super globales de PHP $request = Request::createFromGlobals(); $request = new Request( $_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER );
  • 14. Response Objeto que encapsula toda la información que necesita el cliente $response = new Response( '<html><body>Hello world!</body></html>', Response::HTTP_OK, array('content-type' => 'text/html') );
  • 16. Router Asocia una URL con una acción de un controlador /blog/2 /blog/{page} function viewAction($page) {...}
  • 18. Controller/Action (1/2) Contiene funciones PHP que leen información de la Request y devuelven un objeto response $ php bin/console generate:controller > AppBundle:Blog > ...
  • 19. Controller/Action (2/2) /** * @Route("/", name="post_list") */ public function listAction() { return $this->render('AppBundle:Blog:list.html.twig', array( // ... )); }
  • 20. REQUEST ROUTER CONTROLLER/ACTION TEMPLATE RESPONSE
  • 21. Template Symfony hace uso del motor de plantillas Twig • Rápido: Las plantillas son compiladas a código PHP • Seguro: El código generado es evaluado y confiable • Flexible: Crea tus propias etiquetas y filtros
  • 22. REQUEST ROUTER CONTROLLER/ACTION MODEL TEMPLATE RESPONSE
  • 23. Model: Library (1/5) Doctrine 2 es una librería de mapeo objeto-relacional (ORM) para PHP 5.4+ que proporciona, de forma transparente, persistencia de objetos PHP. Utiliza el patrón Data Mapper. Propel 2 es una alternativa que utiliza el patrón Active Record. app/config/config.yml doctrine: dbal: driver: pdo_mysql host: "%database_host%"
  • 24. Model: Configuration (2/5) Configuración de la conexión con la base de datos app/config/parameters.yml parameters: database_host: 127.0.0.1 database_port: 3306 database_name: blog database_user: admin database_password: password
  • 25. Model: Entity (3/5) $ php bin/console doctrine:database:create $ php bin/console doctrine:generate:entity > AppBundle:Post > ... > Generating entity class src/AppBundle/Entity/Post.php: OK! > Generating repository class src/AppBundle/Repository/PostRepository.php: OK! $ php bin/console doctrine:schema:create
  • 26. Model: Action (4/5) $posts = $this->getDoctrine() ->getRepository(Post::class) ->findAll(); return $this->render( 'AppBundle:Blog:list.html.twig', array( 'posts' => $posts ) );
  • 27. Model: View (5/5) {% extends "::base.html.twig" %} {% block title %}Mi blog{% endblock %} {% block body %} {% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.content }}</p> {% else %} <p>No se han encontrado posts</p> {% endfor %} {% endblock %}
  • 28. REQUEST ROUTER CONTROLLER/ACTION MODEL FORM TEMPLATE RESPONSE
  • 29. Form: Type (1/3) Symfony integra un componente que facilita el trabajo con formularios HTML $ php bin/console doctrine:generate:form AppBundle:Post $builder ->add('title') ->add('content') ->add('status', ChoiceType::class, array( 'choices' => array('borrador' => 0, 'Publicado' => 1),)) ->add('guardar', SubmitType::class);
  • 30. Form: Action (2/3) $form = $this->createForm(PostType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $manager = $this->getDoctrine()->getManager(); $manager->persist($form->getData()); $manager->flush(); return $this->redirectToRoute("add_post"); } return $this->render('AppBundle:Blog:add.html.twig', array( 'form' => $form->createView() ));
  • 31. Form: View (3/3) {% extends "::base.html.twig" %} {% block title %}Añadir post{% endblock %} {% block body %} {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} {% endblock %}
  • 32. REQUEST ROUTER SECURITY CONTROLLER/ACTION MODEL FORM TEMPLATE RESPONSE
  • 33. Security (1/2) Si una request referencia a un área protegida: • Extraer token con credenciales de la request • Validar token y devolver un token autenticado • Guardar el token autenticado • Permitir el acceso
  • 34. Security (2/2) providers: in_memory: memory: users: admin: password: password roles: 'ROLE_ADMIN' encoders: SymfonyComponentSecurityCoreUserUser: plaintext firewalls: main: anonymous: ~ http_basic: ~ access_control: - { path: ^/admin, roles: ROLE_ADMIN }
  • 35. A tener en cuenta • Symfony es muy potente y este ejemplo muy simple • El controlador por defecto contiene mucha magia • Crea servicios y no pongas negocio en el controlador • Seguro que hay un bundle para eso (packagist.org) • No tengas miedo en navegar por el código de Symfony
  • 36. ¿Por dónde continuar? • Documentación (symfony.com/doc/current) • Best Practices (symfony.com/doc/current/best_practices) • Bundles (symfony.com/doc/bundles) • Desarrollo web ágil con Symfony2 (symfony.es/libro) • Charlas SensioLabs (youtube.com/user/SensioLabs) • Charlas deSymfony (youtube.com/user/desymfony)
  • 37. Enlaces de interés • http://symfony.com • http://silex.sensiolabs.org • http://fabien.potencier.org/what-is-symfony2.html • https://github.com/symfony/symfony-demo • http://twig.sensiolabs.org • http://symfony.es • http://sylius.org