deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación
-
Upload
aferrandini -
Category
Documents
-
view
2.467 -
download
0
description
Transcript of deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación
![Page 1: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/1.jpg)
![Page 2: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/2.jpg)
![Page 3: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/3.jpg)
#deSymfony @aferrandini
![Page 4: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/4.jpg)
NO HABLARÉ DE COMIDA#deSymfony @aferrandini
![Page 5: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/5.jpg)
#deSymfony @aferrandini
¿QUIÉN SOY?
•Ariel Ferrandini Price (11-11-85)
•Programador PHP
•Symfony lover (0.9.8beta)
•DeSymfony early adopter
•¡Me encanta viajar!
![Page 6: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/6.jpg)
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
![Page 7: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/7.jpg)
#deSymfony @aferrandini
¿Qué diceeste loco?
![Page 8: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/8.jpg)
Request
¿Cómo funcionan las anotaciones?
#deSymfony @aferrandini
FrontControllerSymfony Kernel
Eventos
![Page 9: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/9.jpg)
¿Cómo funcionan las anotaciones?
#deSymfony @aferrandini
ReaderDriver Semántica
@AnnotationControllerFoo()@AnnotationActionFoo()
<?php
namespace Namespace\Foo;
use AnnotationFoo;
/** * @AnnotationControllerFoo() */class Controller{ /** * @AnnotationActionFoo() */ public function fooAction() { // ... }}
![Page 10: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/10.jpg)
¿Cómo funcionan las anotaciones?
Response
#deSymfony @aferrandini
![Page 11: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/11.jpg)
ANOTACIONESEN
#deSymfony @aferrandini
![Page 12: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/12.jpg)
FRAMEWORK EXTRA BUNDLE
# app/config/config.ymlsensio_framework_extra: router: { annotations: true } request: { converters: true } view: { annotations: true } cache: { annotations: true }
Habilitar las anotaciones
![Page 13: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/13.jpg)
FRAMEWORK EXTRA BUNDLE
Agregar las anotaciones con use
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
![Page 14: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/14.jpg)
ENRUTAMIENTO
# app/config/routing.yml
# importar rutas de una clase Controlleragenda: resource: "@DeSymfonyWebBundle/Controller/AgendaController.php" type: annotation
# importar todas las clases Controller de un directorioweb: resource: "@DeSymfonyWebBundle/Controller" type: annotation
Activar rutas con anotaciones
![Page 15: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/15.jpg)
ENRUTAMIENTO
@Route @Method
#deSymfony @aferrandini
![Page 16: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/16.jpg)
@ROUTE
// DeSymfony/Bundle/WebBundle/Controller/AgendaController.php
/** * @Route(“/agenda”) */class AgendaController extends Controller{ /** * @Route(“/”, name=”agenda”) */ public function agendaAction() { }}
Configurar rutas con anotaciones
![Page 17: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/17.jpg)
@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) { }}
![Page 18: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/18.jpg)
@ROUTE
Configurar rutas con anotaciones// 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) { }}
![Page 19: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/19.jpg)
ROUTING
@Route @Method
#deSymfony @aferrandini
![Page 20: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/20.jpg)
@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
![Page 21: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/21.jpg)
CONVERSORES
@ParamConverter
#deSymfony @aferrandini
![Page 22: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/22.jpg)
@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
![Page 23: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/23.jpg)
// 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
![Page 24: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/24.jpg)
// 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
![Page 25: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/25.jpg)
// 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
![Page 26: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/26.jpg)
// 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
![Page 27: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/27.jpg)
CACHE
@Cache
#deSymfony @aferrandini
![Page 28: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/28.jpg)
@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
![Page 29: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/29.jpg)
@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
![Page 30: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/30.jpg)
VISTA
@Template
#deSymfony @aferrandini
![Page 31: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/31.jpg)
@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() { }}
![Page 32: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/32.jpg)
// 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
![Page 33: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/33.jpg)
// 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
![Page 34: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/34.jpg)
// 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
![Page 35: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/35.jpg)
// 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
![Page 36: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/36.jpg)
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
![Page 37: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/37.jpg)
DOCTRINE ORM@Column@Entity @Index @Id @OrderBy@Table
@HasLifecycleCallbacks
@ManyToOne @ManyToMany @OneToOne @OneToMany
@PostLoad @PostPersist @PostRemove@PostUpdate
@PrePersist @PreRemove@PreUpdate
#deSymfony @aferrandini
![Page 38: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/38.jpg)
DOCTRINE ORM
@ColumnResult
@ChangeTrackingPolicy
@DiscriminatorColumn
@DiscriminatorMap
@EntityResult
@FieldResult
@GeneratedValue @InheritanceType
@JoinColumns@JoinColumn@JoinTable
@MappedSuperclass
@NamedNativeQuery
@SequenceGenerator
@SqlResultSetMapping
@UniqueConstraint
@Version
#deSymfony @aferrandini
![Page 39: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/39.jpg)
SYMFONY2 ~ VALIDATORuse Symfony\Component\Validator\Constraints as Assert;
# app/config/config.ymlframework: validation: { enable_annotations: true }
Habilitar la validación con anotaciones
![Page 40: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/40.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\NotBlank
@Assert\Blank
@Assert\NotNull
@Assert\Null
@Assert\True
@Assert\False
@Assert\Type
use Symfony\Component\Validator\Constraints as Assert;
Restricciones básicas
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 41: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/41.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\Email
@Assert\Length
@Assert\Url
@Assert\Regex
@Assert\Ip
use Symfony\Component\Validator\Constraints as Assert;
Restricciones cadenas de texto
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 42: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/42.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\Range @Assert\Date
@Assert\DateTime
@Assert\Time
use Symfony\Component\Validator\Constraints as Assert;
Restricciones numéricas Restricciones con fechas
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 43: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/43.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\EqualTo
@Assert\NotEqualTo
@Assert\IdenticalTo
@Assert\NotIdenticalTo
@Assert\LessThan
@Assert\LessThanOrEqual
@Assert\GreaterThan
@Assert\GreaterThanOrEqual
use Symfony\Component\Validator\Constraints as Assert;
Restricciones comparativas
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 44: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/44.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\Choice
@Assert\Collection
@Assert\Count
@Assert\UniqueEntity
@Assert\Language
@Assert\Locale
@Assert\Country
use Symfony\Component\Validator\Constraints as Assert;
Restricciones de colecciones
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 45: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/45.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\File @Assert\Image
use Symfony\Component\Validator\Constraints as Assert;
Restricciones de archivos
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 46: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/46.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\CardScheme
@Assert\Luhn
@Assert\Iban
@Assert\Isbn
@Assert\Issn
use Symfony\Component\Validator\Constraints as Assert;
Restricciones bancarias y otras numéricas
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 47: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/47.jpg)
SYMFONY2 ~ VALIDATOR
@Assert\Callback
@Assert\All
@Assert\UserPassword
@Assert\Valid
use Symfony\Component\Validator\Constraints as Assert;
Otras restricciones
@CustomAssert
http://symfony.com/doc/current/book/validation.html#deSymfony @aferrandini
![Page 48: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/48.jpg)
Agregar las anotaciones con use
use JMS\SecurityExtraBundle\Annotation\Secure;
use JMS\SecurityExtraBundle\Annotation\SecureParam;
use JMS\SecurityExtraBundle\Annotation\SecureReturn;
use JMS\SecurityExtraBundle\Annotation\RunAs;
use JMS\SecurityExtraBundle\Annotation\SatisfiesParentSecurityPolicy;
JMSSECURITYEXTRABUNDLEJohannes Schmitt
![Page 49: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/49.jpg)
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy#deSymfony @aferrandini
![Page 50: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/50.jpg)
@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
![Page 51: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/51.jpg)
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy#deSymfony @aferrandini
![Page 52: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/52.jpg)
@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
![Page 53: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/53.jpg)
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy#deSymfony @aferrandini
![Page 54: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/54.jpg)
@SECURERETURN
// DeSymfony/Bundle/WebBundle/Services/AgendaService.phpclass AgendaService{ /** * @SecureReturn(permissions=”VIEW”) */ public function agendaMethod() { return $objeto; }}
Define restricciones para el valor devuelto
![Page 55: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/55.jpg)
@Secure @SecureParam
JMSSECURITYEXTRABUNDLE
@SecureReturn @RunAs
@SatisfiesParentSecurityPolicy#deSymfony @aferrandini
![Page 56: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/56.jpg)
@RUNAS
Cambia el ROL de ejecución de un métodoclass 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() { // ... }}
![Page 57: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/57.jpg)
Ejemplo de @CustomAnnotation
DisableBundle
https://github.com/aferrandini/DisableBundlePermite deshabilitar un Controlador o una Acción por tiempo y redireccionar a otra ruta.
@
#deSymfony @aferrandini
![Page 58: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/58.jpg)
#deSymfony @aferrandini
Mother of Godde las
Anotaciones
![Page 59: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/59.jpg)
@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() { }
![Page 60: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/60.jpg)
¿PREGUNTAS?
#deSymfony @aferrandini
![Page 61: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/61.jpg)
Buen provecho!
![Page 62: deSymfony 2013: Anotaciones, no es parte de mi aplicación, pero es mi aplicación](https://reader034.fdocuments.ec/reader034/viewer/2022051610/5481fed3b47959dd0c8b4687/html5/thumbnails/62.jpg)
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