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)
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
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));
}
}
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