Tutorial #1 Instalación y
primeros pasos
Javier Eguiluz



JORNADAS SYMFONY 2011 1-3 JULIO, CASTELLÓN DESYMFONY.COM
Patrocinadores   Patrocinadores   Patrocinadores
Colaboradores      BRONCE            PLATA        PLATINO y ORO    JORNADAS SYMFONY 2011 están patrocinadas por
importante
Algunas partes de esta presentación
no se pueden entender bien sin ver
el vídeo de su impartición.

Puedes acceder al vídeo en
http://bit.ly/sf-tutorial1
La idea
« Desarrollar una
versión ficticia del sitio
   desymfony.com »
portada
portada ponencias
detalle ponencia
portada ponentes
formulario registro
usuario conectado
administración
github.com/desymfony
El desarrollo
1. Instalación
2. Modelo y Doctrine2
3. Vista y Twig
4. Formularios y seguridad
5. Backend
6. Assetic y Tests
Instalando
 Symfony2
1

symfony.com/download
2
       CON vendors SIN vendors

.ZIP     5.3 MB      0.1 MB


.TGZ     2.7 MB      0.1 MB
2
       CON vendors SIN vendors

.ZIP    5.3 MB
        DOWNLOAD     0.1 MB


.TGZ     2.7 MB      0.1 MB
3

descomprimir
http://localhost/symfony
1

symfony.com/download
2
       CON vendors SIN vendors

.ZIP     5.3 MB      0.1 MB


.TGZ     2.7 MB      0.1 MB
2
       CON vendors SIN vendors

.ZIP     5.3 MB      0.1 MB
                     DOWNLOAD



.TGZ     2.7 MB      0.1 MB
3

descomprimir
4

cd <directorio_symfony>
php bin/vendors install
¿Usas
y te sientes   SI
cómodo con
                    SIN vendors
    Git?


       NO

   CON vendors
Configurador web
EN LA PRÁCTICA




   Configurar el proyecto
          vía web
Instalando el
    proyecto
  deSymfony
1

mkdir proyecto
2
git clone
git@github.com:desymfony/desymfony.git
proyecto
3

proyecto/bin/vendors install
git checkout
    !b tutorial1
    origin/tutorial1
Bundles
1 Proyecto       1 Proyecto
2 Aplicaciones   1 Aplicación
X Módulos        X Bundles
Y Plugins
bundle
« Conjunto de archivos
que implementan una
 única funcionalidad »
src/Desymfony

     PonenciaBundle
     PonenteBundle
     UsuarioBundle
     ComunBundle
src/Desymfony

     DesymfonyBundle
src/Desymfony

     DesymfonyBundle
         Controller
         Entity
         Form
         Resources
Desymfony / SitiosWeb / DesymfonyBundle
Desymfony / SitiosWeb / DesymfonyBundle
 VENDOR
• Tu empresa
• El proyecto
• Tu cliente
Desymfony / SitiosWeb / DesymfonyBundle
 VENDOR CATEGORÍA
• Tu empresa    (opcional)
• El proyecto
• Tu cliente
OBLIGATORIO




                                {
Desymfony / SitiosWeb / DesymfonyBundle
 VENDOR CATEGORÍA           NOMBRE
• Tu empresa    (opcional)
• El proyecto
• Tu cliente
Desymfony / DesymfonyBundle
EN LA PRÁCTICA




   Crear el bundle con el
   generador interactivo
Creando la
primera página
desymfony / contacto
enrutamiento
enrutamiento


Controlador
enrutamiento

                  BD
Controlador
              Modelo
enrutamiento

                  BD
Controlador
              Modelo
   Vista
EN LA PRÁCTICA




      Crear la página de
          contacto
EN LA PRÁCTICA




 Crear todas las páginas
    estáticas del sitio
EN LA PRÁCTICA




Introducir el profiler y la
barra de depuración web
Namespaces
Antes de
<?php                     symfony 1
include './comun/db.php';
require './comun/utilidades.php';

$articulo =
Doctrine::getTable('Articulo')->...
Aplicaciones
<?php                     symfony 1
$articulo =
Doctrine::getTable('Articulo')->...
Aplicaciones
<?php                           Symfony2
use DesymfonyDesymfonyBundleEntityArticulo;

$articulo = new Articulo();
src/Desymfony/DesymfonyBundle

     Entity
          Ponencia

          Ponente

          Usuario
src/Desymfony/DesymfonyBundle/Entity/
                            Ponencia.php
<?php

namespace DesymfonyDesymfonyBundleEntity;

...
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php

public function portadaAction() {

    $ponencia = new Ponencia();

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php
use DesymfonyDesymfonyBundleEntity;

public function portadaAction() {



    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php
use DesymfonyDesymfonyBundleEntity;

public function portadaAction() {

    $ponencia = new EntityPonencia();

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php
use DesymfonyDesymfonyBundleEntity as Entidad;

public function portadaAction() {



    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php
use DesymfonyDesymfonyBundleEntity as Entidad;

public function portadaAction() {

    $ponencia = new EntidadPonencia();

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php


public function portadaAction() {

    $ponencia = new Ponencia();

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php
use DesymfonyDesymfonyBundleEntityPonencia;

public function portadaAction() {

    $ponencia = new Ponencia();

    ...
}
Inyección de
Dependencoas
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php

public function portadaAction() {

    $db = $this->get('doctrine')->...

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php

public function portadaAction() {

    $log = $this->get('logger')->...

    ...
}
src/Desymfony/DesymfonyBundle/Controller/
                    PortadaController.php
<?php

public function portadaAction() {

    $mailer = $this->get('mailer')->...

    ...
}
Contenedor de
        Inyección de Dependencias

$this->get('mailer')->...


$this->container->get('mailer')->...
<?php

public function portadaAction() {

    $this->get('mailer')->send($mensaje);

    ...
}
<?php

public function portadaAction() {

    $this->get('mailer')->send($mensaje);

    ...   ¿Qué mailer utilizar?
}           Clase, métodos
<?php

public function portadaAction() {

    $this->get('mailer')->send($mensaje);

    ...   ¿Qué mailer utilizar?   ¿Configuración?
}           Clase, métodos        Servidor, puerto
app/config/
                      config.yml
swiftmailer:
    transport:   smtp
    host:        localhost
    username:    ~
    password:    ~
[...]/SwiftMailerBundle/[...]/schema/
                         swiftmailer-1.0.xsd
<xsd:complexType   name="config">
  <xsd:attribute   name="username" type="xsd:string" />
  <xsd:attribute   name="password" type="xsd:string" />
  <xsd:attribute   name="host" type="xsd:string" />
  <xsd:attribute   name="port" type="xsd:string" />
  <xsd:attribute   name="type" type="xsd:string" />
  ...

</xsd:complexType>
[...]/SwiftMailerBundle/[...]/config/
                                  swiftmailer.xml
<container xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">

  <parameters>

    <parameter key="swiftmailer.class">
      Swift_Mailer
    </parameter>

    ...
[...]/SwiftMailerBundle/[...]/config/
                                   swiftmailer.xml
<container xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">

  <parameter key="swiftmailer.transport.smtp.class">
    Swift_Transport_EsmtpTransport
  </parameter>

  <call method="setHost">
    <argument>%swiftmailer.transport.smtp.host%</argument>
  </call>
  <call method="setPort">
    <argument>%swiftmailer.transport.smtp.port%</argument>
  </call>
¡Dame un
 mailer!   Contenedor de
            Inyección de
           Dependencias
¡Dame un
               mailer!                    Contenedor de
                                           Inyección de
                                          Dependencias




instrucciones para   instrucciones para     instrucciones para
 crear mailers        crear Doctrine         crear loggers
¡Dame un
               mailer!                    Contenedor de
                                           Inyección de
                                          Dependencias




instrucciones para   instrucciones para     instrucciones para
 crear mailers        crear Doctrine         crear loggers
1. Instalado Symfony2
2. Configurado Symfony2
3. Instalado deSymfony
4. Creado el bundle
5. Todas las páginas estáticas
contacto
javier.eguiluz@gmail.com
twitter.com/javiereguiluz
linkedin.com/in/javiereguiluz

Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos