SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Meetups
@SergioCarracedoMás de 10 años como Desarrollador de Aplicaciones
Algunos coqueteos con el mundo de los SysAdmin
Actualmente: desarrollando Aplicaciones Web para Telefónica.
@davidnegreira
Ficha
Meetups
● Creado en el año 2003 por Fabien Potencier, actual CEO de Sensio Labs
● Licencia:Licencia MIT
● Versión estable: 3.0.5 y LTS: 2.8.5
● Certificación por Sensio Labs (avanzado o experto)
Requisitos Mínimos
Meetups
● Php Orientado a Objetos
● Patrón MVC (Modelo - Vista - Controlador)
● Patrón Inyección de dependencias
● Patrón Controlador Frontal
● ORM ( mapeo objeto-relacional)
¿Donde?
Meetups
● Javier Eguiluz - el guru
● http://librosweb.es/libro/symfony_2_4/
● Documentación Oficial - si de verdad que es buena
● stackoverflow.com/
● Comunidad muy activa: github,twitter,reddit, foros …
● https://github.com/symfony/symfony-demo
¿Porque?
Meetups
● En constante desarrollo y evolución
26,046 commits 157 pull request
● Formado por componentes desacoplados reutilizados por muchos otros desarrollos php
como : Drupal, Laravel, phpBB, Joomla …
● Flexible, ligero, expandible
● Estándares PSRs y convenciones buenas prácticas ...
● Lucha contra la anarquía y el Spaghetti code
● Usado en Youporn.com
¿Como?
Meetups
Petición - Request
Respuesta- Response
¿Como? - Enrutando
Meetups
Request
Response
Enrutado
Controlador Frontal ( app.php )
Controlador
app:
resource: "@AppBundle/Controller/"
type: annotation
/**
* @Route("/hola/", name="saludo")
*/
routing.yml
controller.php
¿Como? - Vistas y Entidades
Meetups
Request
Response
Enrutado
Controlador BD: entidadesPlantillas
M
V C
Vamos al Código: Controlador
Meetups
<?php
namespace AppBundleController;
use AppBundleEntityPost;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
/**
* Controller used to manage blog contents in the public part of the site.
*/
class BlogController extends Controller
{
/**
* @Route("/", defaults={"page": 1}, name="blog_index")
* @Route("/page/{page}", requirements={"page": "[1-9]d*"}, name="blog_index_paginated")
*/
public function indexAction($page)
{
$posts = $this->getDoctrine()->getRepository('AppBundle:Post')->findLatest($page);
return $this->render('blog/index.html.twig', array('posts' => $posts));
}
}
Vamos al Código: Vista
Meetups
index.html.twig
{% extends 'base.html.twig' %}
{% block body_id 'blog_index' %}
{% block body %}
{% for post in posts %}
<article class="post">
<h2>
<a href="{{ path('blog_post', { slug: post.slug }) }}">
{{ post.title|upper }}
</a>
</h2>
{{ post.summary|md2html }}
</article>
{% else %}
<div class="well">{{ 'post.no_posts_found' }}</div>
{% endfor %}
{% endblock %}
base.html.twig
<!DOCTYPE html>
<html>
<head>
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body id="{% block body_id %}{% endblock %}">
<div class="container body-container">
{% block body %}{% endblock %}
</div>
</body>
Vamos al Código: Modelo
Meetups
Doctrine - da para charla !
<?php
namespace AppBundleEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity(repositoryClass="AppBundleRepositoryPostRepository")
* @ORMTable(name="symfony_demo_post")
*/
class Post
{
const NUM_ITEMS = 10;
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string")
* @AssertNotBlank()
*/
private $title;
public function getId()
{
return $this->id;
}
public function getTitle()
{
return $this->title;
}
public function setTitle($title)
{
$this->title = $title;
}
}
Vamos al Código: Modelo Métodos de Consulta
Meetups
En el Controlador
$this->getDoctrine()->getRepository('AppBundle:Post')->findAll();
$this->getDoctrine()->getRepository('AppBundle:Post')->find($id);
$this->getDoctrine()->getRepository('AppBundle:Post')->findBy(array("tittle"=>$tituloBuscado));
$this->getDoctrine()->getRepository('AppBundle:Post')->findOneBy(array("tittle"=>$tituloBuscado));
Vamos al Código: Modelo Repositorios
Meetups
Doctrine
<?php
namespace AppBundleRepository;
use DoctrineORMEntityRepository;
use DoctrineORMQuery;
class PostRepository extends EntityRepository
{
public function queryLatest()
{
$this->getEntityManager()
->createQuery('
SELECT p
FROM AppBundle:Post p
WHERE p.publishedAt <= :now
ORDER BY p.publishedAt DESC
')
->setParameter('now', new DateTime())
->getResult();
$this->createQueryBuilder("p")
->select("p")
->where(" p.publishedAt <= :now")->setParameter('now', new DateTime())
->orderBy("p.publishedA", "DESC")
->getQuery()->getArrayResult();
}
}
Básico para Empezar
Meetups
● La consola de Symfony
$ php bin/console cache:clear --env=prod
● La cache de Symfony: problemas con permisos, limpiar para producción
● Los archivos de configuración: yml
● Los entornos: dev, prod
● Composer para ampliar funcionalidades
Básico para Empezar - Directorios
Meetups
● app/: contiene la configuración de la aplicación.
● src/: aquí se encuentra todo el código PHP de la aplicación.
● vendor/: por convención aquí se guardan todas las librerías creadas por terceros.
● web/: directorio web raíz y contiene todos los archivos que se puede acceder públicamente.
● bin/: ejecutables (e.g. bin/console).
● var/: archivos generados (cache, logs, session)
● tests/: Test Unitarios
Demo
Meetups
I’m ready Baby
Dentro demo
Meetups
Symfony Catalunya es una nueva conferencia
internacional sobre Symfony que se celebrará en
Barcelona durante los próximos 22 y 23 de julio
Meetups
¿Preguntas?
www.opsou.com www.pedrofigueras.comwww.casadellibro.com

Contenu connexe

Tendances

Chamilo para-desarrolladores-1.9
Chamilo para-desarrolladores-1.9Chamilo para-desarrolladores-1.9
Chamilo para-desarrolladores-1.9
Chamilo Association
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
Carlos Zantana
 

Tendances (20)

Uso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomla
 
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP
 
Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009Presentacion Ruby on Rails en Universidad Autónoma 2009
Presentacion Ruby on Rails en Universidad Autónoma 2009
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
 
Chamilo para-desarrolladores-1.9
Chamilo para-desarrolladores-1.9Chamilo para-desarrolladores-1.9
Chamilo para-desarrolladores-1.9
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -Introducción
 
This is Drupal! (Basics)
This is Drupal! (Basics)This is Drupal! (Basics)
This is Drupal! (Basics)
 
Extender la funcionalidad de WordPress
Extender la funcionalidad de WordPressExtender la funcionalidad de WordPress
Extender la funcionalidad de WordPress
 
Introducción a Ruby on rails
Introducción a Ruby on railsIntroducción a Ruby on rails
Introducción a Ruby on rails
 
Taller de laravel
Taller de laravelTaller de laravel
Taller de laravel
 
#MM17ES - Theming en Magento 2 usando un framework de front-end
#MM17ES - Theming en Magento 2 usando un framework de front-end#MM17ES - Theming en Magento 2 usando un framework de front-end
#MM17ES - Theming en Magento 2 usando un framework de front-end
 
JavaScript desde Cero
JavaScript desde CeroJavaScript desde Cero
JavaScript desde Cero
 
Javascript
JavascriptJavascript
Javascript
 
Gutenberg sin miedo
Gutenberg sin miedoGutenberg sin miedo
Gutenberg sin miedo
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1
 

Similaire à Primeros pasos Symfony PHPVigo

Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
deivit86
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
cok12v
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
Cycle-IT
 
HTML5 por Gustavo Vilchez
HTML5 por Gustavo VilchezHTML5 por Gustavo Vilchez
HTML5 por Gustavo Vilchez
Gustavo
 

Similaire à Primeros pasos Symfony PHPVigo (20)

Frameworks para Php Adwa
Frameworks para Php AdwaFrameworks para Php Adwa
Frameworks para Php Adwa
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Django
DjangoDjango
Django
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
Taller de zan php
Taller de zan phpTaller de zan php
Taller de zan php
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
JqueryMobile
JqueryMobile JqueryMobile
JqueryMobile
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
Atix24
Atix24Atix24
Atix24
 
Atix24
Atix24Atix24
Atix24
 
Crear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde CeroCrear Plugin de WordPress desde Cero
Crear Plugin de WordPress desde Cero
 
HTML5 por Gustavo Vilchez
HTML5 por Gustavo VilchezHTML5 por Gustavo Vilchez
HTML5 por Gustavo Vilchez
 
Html5
Html5Html5
Html5
 

Plus de PHP Vigo

Plus de PHP Vigo (7)

Blackfire.io PHPVigo Talk
Blackfire.io PHPVigo TalkBlackfire.io PHPVigo Talk
Blackfire.io PHPVigo Talk
 
Diariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigoDiariomotor Presentación PHPVigo
Diariomotor Presentación PHPVigo
 
PHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio CarracedoPHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
PHPVigo #09: Preprocesadores CSS/SASS por Sergio Carracedo
 
Deployer Despliegue rápido de apps
Deployer  Despliegue rápido de appsDeployer  Despliegue rápido de apps
Deployer Despliegue rápido de apps
 
[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )[Php vigo][talk] unit testing sucks ( and it's your fault )
[Php vigo][talk] unit testing sucks ( and it's your fault )
 
Jesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a díaJesús Amieiro: Git para el día a día
Jesús Amieiro: Git para el día a día
 
Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1Presentación del grupo PHPVigo - Meetup #1
Presentación del grupo PHPVigo - Meetup #1
 

Dernier

TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
pvtablets2023
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 

Dernier (20)

Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 

Primeros pasos Symfony PHPVigo

  • 1.
  • 2. Meetups @SergioCarracedoMás de 10 años como Desarrollador de Aplicaciones Algunos coqueteos con el mundo de los SysAdmin Actualmente: desarrollando Aplicaciones Web para Telefónica. @davidnegreira
  • 3. Ficha Meetups ● Creado en el año 2003 por Fabien Potencier, actual CEO de Sensio Labs ● Licencia:Licencia MIT ● Versión estable: 3.0.5 y LTS: 2.8.5 ● Certificación por Sensio Labs (avanzado o experto)
  • 4. Requisitos Mínimos Meetups ● Php Orientado a Objetos ● Patrón MVC (Modelo - Vista - Controlador) ● Patrón Inyección de dependencias ● Patrón Controlador Frontal ● ORM ( mapeo objeto-relacional)
  • 5. ¿Donde? Meetups ● Javier Eguiluz - el guru ● http://librosweb.es/libro/symfony_2_4/ ● Documentación Oficial - si de verdad que es buena ● stackoverflow.com/ ● Comunidad muy activa: github,twitter,reddit, foros … ● https://github.com/symfony/symfony-demo
  • 6. ¿Porque? Meetups ● En constante desarrollo y evolución 26,046 commits 157 pull request ● Formado por componentes desacoplados reutilizados por muchos otros desarrollos php como : Drupal, Laravel, phpBB, Joomla … ● Flexible, ligero, expandible ● Estándares PSRs y convenciones buenas prácticas ... ● Lucha contra la anarquía y el Spaghetti code ● Usado en Youporn.com
  • 8. ¿Como? - Enrutando Meetups Request Response Enrutado Controlador Frontal ( app.php ) Controlador app: resource: "@AppBundle/Controller/" type: annotation /** * @Route("/hola/", name="saludo") */ routing.yml controller.php
  • 9. ¿Como? - Vistas y Entidades Meetups Request Response Enrutado Controlador BD: entidadesPlantillas M V C
  • 10. Vamos al Código: Controlador Meetups <?php namespace AppBundleController; use AppBundleEntityPost; use SensioBundleFrameworkExtraBundleConfigurationRoute; use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; /** * Controller used to manage blog contents in the public part of the site. */ class BlogController extends Controller { /** * @Route("/", defaults={"page": 1}, name="blog_index") * @Route("/page/{page}", requirements={"page": "[1-9]d*"}, name="blog_index_paginated") */ public function indexAction($page) { $posts = $this->getDoctrine()->getRepository('AppBundle:Post')->findLatest($page); return $this->render('blog/index.html.twig', array('posts' => $posts)); } }
  • 11. Vamos al Código: Vista Meetups index.html.twig {% extends 'base.html.twig' %} {% block body_id 'blog_index' %} {% block body %} {% for post in posts %} <article class="post"> <h2> <a href="{{ path('blog_post', { slug: post.slug }) }}"> {{ post.title|upper }} </a> </h2> {{ post.summary|md2html }} </article> {% else %} <div class="well">{{ 'post.no_posts_found' }}</div> {% endfor %} {% endblock %} base.html.twig <!DOCTYPE html> <html> <head> {% block stylesheets %} <link rel="stylesheet" href="{{ asset('css/app.css') }}"> {% endblock %} <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /> </head> <body id="{% block body_id %}{% endblock %}"> <div class="container body-container"> {% block body %}{% endblock %} </div> </body>
  • 12. Vamos al Código: Modelo Meetups Doctrine - da para charla ! <?php namespace AppBundleEntity; use DoctrineORMMapping as ORM; /** * @ORMEntity(repositoryClass="AppBundleRepositoryPostRepository") * @ORMTable(name="symfony_demo_post") */ class Post { const NUM_ITEMS = 10; /** * @ORMId * @ORMGeneratedValue * @ORMColumn(type="integer") */ private $id; /** * @ORMColumn(type="string") * @AssertNotBlank() */ private $title; public function getId() { return $this->id; } public function getTitle() { return $this->title; } public function setTitle($title) { $this->title = $title; } }
  • 13. Vamos al Código: Modelo Métodos de Consulta Meetups En el Controlador $this->getDoctrine()->getRepository('AppBundle:Post')->findAll(); $this->getDoctrine()->getRepository('AppBundle:Post')->find($id); $this->getDoctrine()->getRepository('AppBundle:Post')->findBy(array("tittle"=>$tituloBuscado)); $this->getDoctrine()->getRepository('AppBundle:Post')->findOneBy(array("tittle"=>$tituloBuscado));
  • 14. Vamos al Código: Modelo Repositorios Meetups Doctrine <?php namespace AppBundleRepository; use DoctrineORMEntityRepository; use DoctrineORMQuery; class PostRepository extends EntityRepository { public function queryLatest() { $this->getEntityManager() ->createQuery(' SELECT p FROM AppBundle:Post p WHERE p.publishedAt <= :now ORDER BY p.publishedAt DESC ') ->setParameter('now', new DateTime()) ->getResult(); $this->createQueryBuilder("p") ->select("p") ->where(" p.publishedAt <= :now")->setParameter('now', new DateTime()) ->orderBy("p.publishedA", "DESC") ->getQuery()->getArrayResult(); } }
  • 15. Básico para Empezar Meetups ● La consola de Symfony $ php bin/console cache:clear --env=prod ● La cache de Symfony: problemas con permisos, limpiar para producción ● Los archivos de configuración: yml ● Los entornos: dev, prod ● Composer para ampliar funcionalidades
  • 16. Básico para Empezar - Directorios Meetups ● app/: contiene la configuración de la aplicación. ● src/: aquí se encuentra todo el código PHP de la aplicación. ● vendor/: por convención aquí se guardan todas las librerías creadas por terceros. ● web/: directorio web raíz y contiene todos los archivos que se puede acceder públicamente. ● bin/: ejecutables (e.g. bin/console). ● var/: archivos generados (cache, logs, session) ● tests/: Test Unitarios
  • 18. Meetups Symfony Catalunya es una nueva conferencia internacional sobre Symfony que se celebrará en Barcelona durante los próximos 22 y 23 de julio