Upload
javier-eguiluz
View
34.442
Download
2
Embed Size (px)
DESCRIPTION
Instalación y primeros pasos fue la primera ponencia impartida durante las Jornadas Symfony 2011. Se trata de la primera parte de las seis que forman el tutorial de desarrollo de la aplicación github.com/desymfony. Durante la misma se explIca cómo instalar y configurar Symfony2, cómo instalar el proyecto deSymfony, cómo crear los bundles con el generador interactivo y también se introduce el funcionamiento de la arquitectura MVC en Symfony2 mediante la programación de la parte dedicada a mostrar las páginas estáticas de la aplicación.
Citation preview
JORNADAS SYMFONY 2011 1-3 JULIO, CASTELLÓN DESYMFONY.COM
Tutorial #1 Instalación y primeros pasosJavier Eguiluz
JORNADAS SYMFONY 2011 están patrocinadas porPa
troc
inad
ores
PL
ATIN
O y
ORO
Patr
ocin
ador
es
PLAT
APa
troc
inad
ores
BR
ONCE
Cola
bora
dore
s
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 enhttp://bit.ly/sf-tutorial1
importante
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
InstalandoSymfony2
1
symfony.com/download
2CON vendors SIN vendors
.ZIP 5.3 MB 0.1 MB
.TGZ 2.7 MB 0.1 MB
2CON vendors SIN vendors
.ZIP 5.3 MB 0.1 MB
.TGZ 2.7 MB 0.1 MB
DOWNLOAD
3
descomprimir
http://localhost/symfony
1
symfony.com/download
2CON vendors SIN vendors
.ZIP 5.3 MB 0.1 MB
.TGZ 2.7 MB 0.1 MB
2CON vendors SIN vendors
.ZIP 5.3 MB 0.1 MB
.TGZ 2.7 MB 0.1 MB
DOWNLOAD
3
descomprimir
4
cd <directorio_symfony>
php bin/vendors install
SI
NO
CON vendors
SIN vendors
¿Usas y te sientes cómodo con
Git?
Configurador web
Configurar el proyecto vía web
EN LA PRÁCTICA
Instalando elproyecto
deSymfony
1
mkdir proyecto
2
git [email protected]:desymfony/desymfony.git proyecto
3
proyecto/bin/vendors install
git checkout !b tutorial1 origin/tutorial1
Bundles
1 Proyecto
2 Aplicaciones
X Módulos
Y Plugins
1 Proyecto
1 Aplicación
X Bundles
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
• Tu empresa
• El proyecto
• Tu cliente
VENDOR
Desymfony / SitiosWeb / DesymfonyBundle
• Tu empresa
• El proyecto
• Tu cliente
VENDOR CATEGORÍA(opcional)
Desymfony / SitiosWeb / DesymfonyBundle
• Tu empresa
• El proyecto
• Tu cliente
VENDOR CATEGORÍA(opcional)
NOMBRE
{OBLIGATORIO
Desymfony / DesymfonyBundle
Crear el bundle con el generador interactivo
EN LA PRÁCTICA
Creando la primera página
desymfony / contacto
enrutamiento
Controlador
enrutamiento
Controlador BD
Modelo
enrutamiento
Controlador
Vista
BD
Modelo
enrutamiento
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
EN LA PRÁCTICA
Namespaces
Antes de
symfony 1<?php
include './comun/db.php';
require './comun/utilidades.php';
$articulo = Doctrine::getTable('Articulo')->...
Aplicaciones
symfony 1<?php
$articulo = Doctrine::getTable('Articulo')->...
Aplicaciones
Symfony2<?php
use Desymfony\DesymfonyBundle\Entity\Articulo;
$articulo = new Articulo();
src/Desymfony/DesymfonyBundle
Entity
Ponencia
Ponente
Usuario
src/Desymfony/DesymfonyBundle/Entity/
Ponencia.php<?php
namespace Desymfony\DesymfonyBundle\Entity;
...
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php<?php
public function portadaAction() {
$ponencia = new Ponencia();
...}
<?phpuse Desymfony\DesymfonyBundle\Entity;
public function portadaAction() {
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
<?phpuse Desymfony\DesymfonyBundle\Entity;
public function portadaAction() {
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
$ponencia = new Entity\Ponencia();
<?phpuse Desymfony\DesymfonyBundle\Entity as Entidad;
public function portadaAction() {
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
<?phpuse Desymfony\DesymfonyBundle\Entity as Entidad;
public function portadaAction() {
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
$ponencia = new Entidad\Ponencia();
<?php
public function portadaAction() {
$ponencia = new Ponencia();
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
<?php
public function portadaAction() {
$ponencia = new Ponencia();
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
use Desymfony\DesymfonyBundle\Entity\Ponencia;
Inyección de Dependencoas
<?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')->...
...}
src/Desymfony/DesymfonyBundle/Controller/
PortadaController.php
$this->get('mailer')->...
$this->container->get('mailer')->...
Contenedor de
Inyección de Dependencias
<?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?Clase, métodos
¿Configuración?Servidor, puerto
swiftmailer: transport: smtp host: localhost username: ~ password: ~
app/config/
config.yml
<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/[...]/schema/
swiftmailer-1.0.xsd
<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>
[...]/SwiftMailerBundle/[...]/config/
swiftmailer.xml
¡Dame un mailer! Contenedor de
Inyección de Dependencias
¡Dame un mailer!
instrucciones para
crear mailersinstrucciones para
crear Doctrineinstrucciones para
crear loggers
Contenedor de Inyección de
Dependencias
¡Dame un mailer!
instrucciones para
crear mailersinstrucciones para
crear Doctrineinstrucciones para
crear loggers
Contenedor de Inyección de
Dependencias
1. Instalado Symfony2
2. Configurado Symfony2
3. Instalado deSymfony
4. Creado el bundle
5. Todas las páginas estáticas