SlideShare una empresa de Scribd logo
1 de 62
Descargar para leer sin conexión
#deSymfony @aferrandini
NO HABLARÉ DE COMIDA
#deSymfony @aferrandini
#deSymfony @aferrandini
¿QUIÉN SOY?
•Ariel Ferrandini Price (11-11-85)
•Programador PHP
•Symfony lover (0.9.8beta)
•DeSymfony early adopter
•¡Me encanta viajar!
ORIGEN DE LAS ANOTACIONES
anotación
1. nota crítica o explicatoria agregados a un texto.
Java 1.5, especificación JSR-175 en 2002 y aprobadas en septiembre de 2004.
Las anotaciones no afectan directamente a la semántica del programa, pero afectan a
la forma en que los programas son tratados por herramientas y bibliotecas, que a su vez
pueden afectar a la semántica del programa en ejecución. Las anotaciones se pueden leer
en clases mediante reflexión en tiempo de ejecución.
#deSymfony @aferrandini
#deSymfony @aferrandini
¿Qué dice
este loco?
Request
¿Cómo funcionan las anotaciones?
#deSymfony @aferrandini
FrontController
Symfony Kernel
Eventos
¿Cómo funcionan las anotaciones?
#deSymfony @aferrandini
ReaderDriver Semántica
@AnnotationControllerFoo()
@AnnotationActionFoo()
<?php
namespace NamespaceFoo;
use AnnotationFoo;
/**
* @AnnotationControllerFoo()
*/
class Controller
{
/**
* @AnnotationActionFoo()
*/
public function fooAction()
{
// ...
}
}
¿Cómo funcionan las anotaciones?
Response
#deSymfony @aferrandini
ANOTACIONES
EN
#deSymfony @aferrandini
FRAMEWORK EXTRA BUNDLE
# app/config/config.yml
sensio_framework_extra:
router: { annotations: true }
request: { converters: true }
view: { annotations: true }
cache: { annotations: true }
Habilitar las anotaciones
FRAMEWORK EXTRA BUNDLE
Agregar las anotaciones con use
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SensioBundleFrameworkExtraBundleConfigurationMethod;
use SensioBundleFrameworkExtraBundleConfigurationParamConverter;
use SensioBundleFrameworkExtraBundleConfigurationCache;
use SensioBundleFrameworkExtraBundleConfigurationTemplate;
ENRUTAMIENTO
# app/config/routing.yml
# importar rutas de una clase Controller
agenda:
resource: "@DeSymfonyWebBundle/Controller/AgendaController.php"
type: annotation
# importar todas las clases Controller de un directorio
web:
resource: "@DeSymfonyWebBundle/Controller"
type: annotation
Activar rutas con anotaciones
ENRUTAMIENTO
@Route @Method
#deSymfony @aferrandini
@ROUTE
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/”, name=”agenda”)
*/
public function agendaAction()
{
}
}
Configurar rutas con anotaciones
@ROUTE
Configurar rutas con anotaciones
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{dia}”, name=”agenda”)
*/
public function agendaAction($dia)
{
}
}
@ROUTE
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{dia}”, name=”agenda”,
requirements={“dia”=”d+”}, defaults={“dia”=21})
*/
public function agendaAction($dia)
{
}
}
ROUTING
@Route @Method
#deSymfony @aferrandini
@METHOD
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/editar/{id}”, name=”editar_agenda”)
* @Method({“GET”, “POST”})
*/
public function editarAction($id)
{
}
}
Configurar método con anotaciones
CONVERSORES
@ParamConverter
#deSymfony @aferrandini
@PARAMCONVERTER
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”)
*/
public function agendaAction(Agenda $agenda)
{
}
}
Convierte parámetros en objetos
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”,
options={“entity_manager” = “foo”)
*/
public function agendaAction(Agenda $agenda)
{
}
@PARAMCONVERTER
Convierte parámetros en objetos
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}/{agenda_id}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”,
options={“id” = “agenda_id”)
*/
public function agendaAction(Agenda $agenda)
{
}
@PARAMCONVERTER
Convierte parámetros en objetos
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{slug}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”,
options={“mapping”: {“slug”: “slug”}})
*/
public function agendaAction(Agenda $agenda)
{
}
@PARAMCONVERTER
Convierte parámetros en objetos
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{inicio}/{fin}”, name=”agenda”)
* @ParamConverter(“inicio”, options={“format”: “Y-m-d”})
* @ParamConverter(“fin”, options={“format”: “Y-m-d”})
*/
public function agendaAction(DateTime $inicio, DateTime $fin)
{
}
@PARAMCONVERTER
Convierte parámetros en objetos
CACHE
@Cache
#deSymfony @aferrandini
@CACHE
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Cache(expires=”tomorrow”)
*/
class AgendaController extends Controller
{
/**
* @Cache(expires=”+5 days”)
*/
public function indexAction()
{
}
}
Establece la cache de Response
@Cache(expires=”tomorrow”)
@Cache(smaxage=”15”)
@Cache(maxage=”15”)
@Cache(vary=[”Cookie”])
$response->setExpires()
$response->setSharedMaxAge()
$response->setMaxAge()
$response->setVary()
@CACHE
Establece la cache de Response
VISTA
@Template
#deSymfony @aferrandini
@TEMPLATE
Asocia un método acción con una plantilla
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/”, name=”agenda”)
* @Template(“DeSymfonyWebBundle:Agenda:agenda.html.twig”)
*/
public function agendaAction()
{
}
}
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/”, name=”agenda”)
* @Template
*/
public function agendaAction()
{
}
}
@TEMPLATE
Asocia un método acción con una plantilla
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”)
* @Template(“DeSymfonyWebBundle:Agenda:agenda.html.twig”, vars={“agenda”})
*/
public function agendaAction(Agenda $agenda)
{
}
@TEMPLATE
Asocia un método acción con una plantilla
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}”, name=”agenda”)
* @ParamConverter(“agenda”, class=”DeSymfonyWebBundle:Agenda”)
* @Template(vars={“agenda”})
*/
public function agendaAction(Agenda $agenda)
{
}
@TEMPLATE
Asocia un método acción con una plantilla
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/{id}”, name=”agenda”)
* @Template(engine=”php”)
*/
public function agendaAction($id)
{
}
}
@TEMPLATE
Asocia un método acción con una plantilla
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html
DOCTRINE
http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.html
#deSymfony @aferrandini
http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/annotations-reference.html
Doctrine Common
Doctrine ORM
Doctrine ODM
DOCTRINE ORM
@Column@Entity @Index @Id @OrderBy@Table
@HasLifecycleCallbacks
@ManyToOne @ManyToMany @OneToOne @OneToMany
@PostLoad @PostPersist @PostRemove@PostUpdate
@PrePersist @PreRemove@PreUpdate
#deSymfony @aferrandini
DOCTRINE ORM
@ColumnResult
@ChangeTrackingPolicy
@DiscriminatorColumn
@DiscriminatorMap
@EntityResult
@FieldResult
@GeneratedValue @InheritanceType
@JoinColumns@JoinColumn@JoinTable
@MappedSuperclass
@NamedNativeQuery
@SequenceGenerator
@SqlResultSetMapping
@UniqueConstraint
@Version
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
use SymfonyComponentValidatorConstraints as Assert;
# app/config/config.yml
framework:
validation: { enable_annotations: true }
Habilitar la validación con anotaciones
SYMFONY2 ~VALIDATOR
@AssertNotBlank
@AssertBlank
@AssertNotNull
@AssertNull
@AssertTrue
@AssertFalse
@AssertType
use SymfonyComponentValidatorConstraints as Assert;
Restricciones básicas
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertEmail
@AssertLength
@AssertUrl
@AssertRegex
@AssertIp
use SymfonyComponentValidatorConstraints as Assert;
Restricciones cadenas de texto
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertRange @AssertDate
@AssertDateTime
@AssertTime
use SymfonyComponentValidatorConstraints as Assert;
Restricciones numéricas Restricciones con fechas
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertEqualTo
@AssertNotEqualTo
@AssertIdenticalTo
@AssertNotIdenticalTo
@AssertLessThan
@AssertLessThanOrEqual
@AssertGreaterThan
@AssertGreaterThanOrEqual
use SymfonyComponentValidatorConstraints as Assert;
Restricciones comparativas
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertChoice
@AssertCollection
@AssertCount
@AssertUniqueEntity
@AssertLanguage
@AssertLocale
@AssertCountry
use SymfonyComponentValidatorConstraints as Assert;
Restricciones de colecciones
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertFile @AssertImage
use SymfonyComponentValidatorConstraints as Assert;
Restricciones de archivos
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertCardScheme
@AssertLuhn
@AssertIban
@AssertIsbn
@AssertIssn
use SymfonyComponentValidatorConstraints as Assert;
Restricciones bancarias y otras numéricas
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
SYMFONY2 ~VALIDATOR
@AssertCallback
@AssertAll
@AssertUserPassword
@AssertValid
use SymfonyComponentValidatorConstraints as Assert;
Otras restricciones
@CustomAssert
http://symfony.com/doc/current/book/validation.html
#deSymfony @aferrandini
Agregar las anotaciones con use
use JMSSecurityExtraBundleAnnotationSecure;
use JMSSecurityExtraBundleAnnotationSecureParam;
use JMSSecurityExtraBundleAnnotationSecureReturn;
use JMSSecurityExtraBundleAnnotationRunAs;
use JMSSecurityExtraBundleAnnotationSatisfiesParentSecurityPolicy;
JMSSECURITYEXTRABUNDLE
Johannes Schmitt
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy
#deSymfony @aferrandini
@SECURE
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/editar/{id}”, name=”editar_agenda”)
* @Method({“GET”, “POST”})
* @Secure(roles=”ROLE_EDITOR, ROLE_ADMIN, ROLE_FOO”)
*/
public function editarAction($id)
{
}
Define quién puede invocar el método
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy
#deSymfony @aferrandini
@SECUREPARAM
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @Route(“/agenda”)
*/
class AgendaController extends Controller
{
/**
* @SecureParam(name="agenda", permissions="OWNER")
* @Secure(roles=”ROLE_EDITOR, ROLE_ADMIN, ROLE_FOO”)
*/
public function editarAction(Agenda $agenda)
{
}
}
Define restricciones para los parámetros
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy
#deSymfony @aferrandini
@SECURERETURN
// DeSymfony/Bundle/WebBundle/Services/AgendaService.php
class AgendaService
{
/**
* @SecureReturn(permissions=”VIEW”)
*/
public function agendaMethod()
{
return $objeto;
}
}
Define restricciones para el valor devuelto
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy
#deSymfony @aferrandini
@RUNAS
Cambia el ROL de ejecución de un método
class AgendaPublicService
{
protected $agendaPrivateService;
/**
* @Secure(roles=”ROLE_USER”)
* @RunAs(roles=”ROLE_PRIVATE”)
*/
public function agendaMethod()
{
return $this
->agendaPrivateService
->agendaPrivate();
}
}
class AgendaPrivateService
{
/**
* @Secure(role=”ROLE_PRIVATE”)
*/
public function agendaPrivate()
{
// ...
}
}
Ejemplo de @CustomAnnotation
DisableBundle
https://github.com/aferrandini/DisableBundle
Permite deshabilitar un Controlador o una Acción por tiempo y redireccionar a
otra ruta.
@
#deSymfony @aferrandini
#deSymfony @aferrandini
Mother of God
de las
Anotaciones
@IGNOREANNOTATION
¡Anotación para ignorar anotaciones!
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/**
* @IgnoreAnnotation(“AnotacionQueNoExiste”)
*/
class AgendaController extends Controller
{
/**
* @Route(“/”, name=”agenda”)
* @Template(“DeSymfonyWebBundle:Agenda:agenda.html.twig”)
* @AnotacionQueNoExiste
*/
public function agendaAction()
{
}
¿PREGUNTAS?
#deSymfony @aferrandini
Buen
provecho!
https://connect.sensiolabs.com/profile/aferrandini
MUCHAS GRACIAS
#deSymfony
@aferrandini
https://joind.in/8849
http://es.linkedin.com/in/arielferrandini https://github.com/aferrandini http://twitter.com/aferrandini

Más contenido relacionado

Similar a Anotaciones en Symfony. DeSymfony 2013. Ariel Ferrandini

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
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPJavier Eguiluz
 
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
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebFacundo E. Goñi Perez
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPJuan Belón Pérez
 
Android UC3M Sesión 2
Android UC3M Sesión 2Android UC3M Sesión 2
Android UC3M Sesión 2topoos
 
Introducción al desarrollo Android, Sesión 2
Introducción al desarrollo Android, Sesión 2Introducción al desarrollo Android, Sesión 2
Introducción al desarrollo Android, Sesión 2findemor
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
Tutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPTutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPJuan Belón Pérez
 
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
 

Similar a Anotaciones en Symfony. DeSymfony 2013. Ariel Ferrandini (20)

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...
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP
 
Laravel 5.1
Laravel 5.1Laravel 5.1
Laravel 5.1
 
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
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos Web
 
Plone en La Jornada
Plone en La JornadaPlone en La Jornada
Plone en La Jornada
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Zen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHPZen Scaffolding - Programador PHP
Zen Scaffolding - Programador PHP
 
Android UC3M Sesión 2
Android UC3M Sesión 2Android UC3M Sesión 2
Android UC3M Sesión 2
 
Introducción al desarrollo Android, Sesión 2
Introducción al desarrollo Android, Sesión 2Introducción al desarrollo Android, Sesión 2
Introducción al desarrollo Android, Sesión 2
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Symfony 2 CMF
Symfony 2 CMFSymfony 2 CMF
Symfony 2 CMF
 
33 php
33 php33 php
33 php
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
funciones con c++
funciones con c++funciones con c++
funciones con c++
 
Tutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPTutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHP
 
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
 

Más de Paradigma Digital

Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Paradigma Digital
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxParadigma Digital
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixParadigma Digital
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API ManagementParadigma Digital
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.Paradigma Digital
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxParadigma Digital
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microserviciosParadigma Digital
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!Paradigma Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?Paradigma Digital
 

Más de Paradigma Digital (20)

Ddd + ah + microservicios
Ddd + ah + microserviciosDdd + ah + microservicios
Ddd + ah + microservicios
 
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
Bots 3.0: Dejando atrás los bots conversacionales con Dialogflow.
 
Have you met Istio?
Have you met Istio?Have you met Istio?
Have you met Istio?
 
Linkerd a fondo
Linkerd a fondoLinkerd a fondo
Linkerd a fondo
 
Horneando apis
Horneando apisHorneando apis
Horneando apis
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFluxProgramación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
 
Orquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
 
Meetup microservicios: API Management
Meetup microservicios: API ManagementMeetup microservicios: API Management
Meetup microservicios: API Management
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptxDocker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
 
Implementando microservicios
Implementando microserviciosImplementando microservicios
Implementando microservicios
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
 
Overview atlas (1)
Overview atlas (1)Overview atlas (1)
Overview atlas (1)
 
Cómo usar google analytics
Cómo usar google analyticsCómo usar google analytics
Cómo usar google analytics
 
Transformación Digital
Transformación DigitalTransformación Digital
Transformación Digital
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?¿Cómo vencer a los dragones digitales?
¿Cómo vencer a los dragones digitales?
 

Último

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
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
 
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 de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
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
 
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
 
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
 
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
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
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
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 

Último (20)

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.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
 
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 de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
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
 
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.
 
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
 
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
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
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
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 

Anotaciones en Symfony. DeSymfony 2013. Ariel Ferrandini