y Simplifier vos développement We b professionnels avec P H ...

flippantmewlingSecurity

Jun 19, 2012 (5 years and 3 days ago)

353 views

PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
symfony
S
implifier vos développement Web
professionnels avec PHP
Fabien
Potencier
http://www.symfony-project.com/
http://www.
sensio
.com/
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Sensio

Agence Interactive française créée en 1998

Groupe de 150 personnes

30 personnes dédiées au nouvelles technologies
Webmarketing
Technologies
Open Source
(
Framework
PHP)
Technologies
Internet
SENSIO
Agence Interactive
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Sensio Labs

Spécialiste du monde Open-Source (LAMP)

L
inux

A
pache

M
ySQL / PostgreSQL

P
HP / Perl / Python
/ Ruby

Un p
ôle R&D dédié à l

Open-Source

Des clients Grands Comptes et Institutionnels

Conseil en stratégie Internet

Assistance à ma
î
tr
ise d

ouvrage

Audit / Formation

Développement Internet/Intranet
Créateur
Framework PHP
symfony
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
symfony

Framework Web PHP 5

Basé sur 9 ans d

expérience Sensio

Basé sur des projets existants
(Mojavi, Propel, Prado)

Open-Source

Conçu pour gérer :

Des sites professionnels

Des problématiques complexes

Dans des environnements exigeants
Licence
MIT
Rapprocher
le monde de l

Entreprise
et le monde de
l

Open-Source
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Ne pas réinventer la roue

Architecture MVC : Modèle / Vue / Contr
ôleur

Couche d

abstraction
Objet-Relationnel

Tests unitaires et fonctionnels

Gestion des déploiements, support des
environnements

Sécurité (protection XSS par défaut)

Extensibilité (système de
plugins
)
simplifier
la vie
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Développer plus vite

Une ligne de code a un co
ût

Pour l
’é
crire

Pour la tester

Pour la maintenir

Ecrire moins de code

Architecture : contr
ô
leur, ORM,


Fichiers de configuration

Autoloading

Générateurs

Helpers

Plus de temps pour les règles métiers, cas limites,

moins de code

moins de complexité

moins de bugs

gain de
productivité

gain de temps
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
symfony
, un
Framework
Web

Lisibilité


Maintenabilité


Evolutivité

Pérennité
Architecture MVC
Standardisation
Tests unitaires et fonctionnels
Documentation API
Orienté Objets
Plugins
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Les Atouts Fonctionnels

Documentation

Configurabilité

Protection XSS

Aide
debugging

Tests fonctionnels

Extensibilité :
Plugins

Admin Generator

ORM :
Propel
ou Doctrine

i18n / l10n

1.0 maintenue sur le long terme
Les Standards
PHP 5
MVC
Routing
Cache
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Installation
symfony

Installation PEAR
$
pear channel-discover
pear
.
symfony-project
.
com

$
pear install
symfony/symfony-1
.0.0

Installation SVN /
symlink

$
svn propedit
svn
:
externals
symfony
http:
//svn
.
symfony-project
.
com/branches/1
.0

Sandbox

$
curl
-O http://www.
symfony-project
.
com/get/sf_sandbox-1
.0.0.
tgz

$
tar zxpf
sf_sandbox-1.0.0.
tgz
PEAR package
Installation Subversion
Package
Téléchargeable
Sandbox
facile
rapide
recommandé
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Création d

une Application
$
mkdir
~/sfdemo
$
cd
~/sfdemo
$
symfony
init-project
sfdemo
$
.
/symfony
init-app
frontend
Projet

Application(s)

Module(s)

Action(s)
Composant(s)

Template
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Base de données

Configuration de la base de données

#
config/databases
.
yml
prod
:


propel
:


param
:


password
:
PAssWD

all
:


propel
:


class:

sfPropelDatabase
param
:

dsn
:
mysql
:
//root
:
@localhost/blog

Définition du schéma

#
config/schema
.
yml
post:

title
:

{ type:
varchar
, size: 255 }
content:

{ type:
longvarchar
}

is_published
:

{ type:
boolean

}

author_id
:

{ type:
integer
,
foreignTable
:
author
,

foreignReference
: id
}

created_on
:

~
Gestion
des
environnements
Abstraction SQL
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Base de données

Création des données de tests

#
config/fixtures
.
yml
Author
:

fabien
:


first_name
: Fabien


last_name
:

Potencier

Post:

first_post
:


author_id
:
fabien

title
:

PHP Québec
$ .
/symfony
propel-build-all-load
1)
Crée
les classes
du modèle
2)
Converti
le
schéma
en SQL
3)
Crée
les tables
4) Charge les
données
de test
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Le Modèle
//
lib/model/Author
.
php
class
Author extends BaseAuthor
{

function getFullName
()
{

return

$this
-
>
getFirstName
().
'

'
.
$this
-
>
getLastName
();

}
}
$author
= new
Author
();
$author
-
>
setFirstName
(
'Fabien'
);
$author
-
>
setLastName
(
'Potencier'
);
$author
-
>
save
();
$post = new Post();
$post
-
>
setAuthor
(
$author
);
$post
->
setPublishedOn
(
'12:00
tomorrow'
);
$post
->
isPublished
(
true
);
$post
->
save
();
$posts
=
PostPeer
::
doSelect
(new
Criteria
());
ORM
Object Relationship Mapping
Propel
/ Doctrine
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Création du
Back-Office

Création
automatique
d

une Console
d

Administration de Production

Listes

Pagination

Tri
$
./symfony
propel-init-admin frontend post Post
1)
Crée
un module post
2)
Génère
la configuration
Code généré MVC
et personnalisable
Fichier configuration
Contr
ôleur
Templates


Filtres


Validation


CRUD
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Admin Generator

Liste
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Admin Generator

Edition
__toString
()
widgets
m2m
relationship
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Extensibilité

Extension du module

class
postActions extends autoPostActions

{

protected function addFilterCriteria
($c)
{
$c
->
add
(
PostPeer
::
IS_PUBLISHED,
true
);

parent
::
addFilterCriteria
($c);
}
}

Personnalisation des
templates
Generated
module
_edit_* : actions,
footer,
form,
header,
messages
_list_* : footer, header, messages,
td_actions
, t(d|h)_stacked, t(d|h)_tabular
_filters,
editSuccess
,
listSuccess
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Configurabilité

Au niveau des modules

# apps/frontend/modules/post/config/generator.yml
generator:
class:
sfPropelAdminGenerator
param:
model_class:
Post
list:
display: [
=title
, author, created_on]

filters
: [title, author, published_on]

Au niveau de l

application

# apps/frontend/config/security.yml
default:
is_secure: on
credentials: admin
$
./symfony plugin-install
http://plugins.symfony-project.com/
sfGuardPlugin
Configuration en cascade
Framework
Projet
Application
Module
LOC : 0
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Création du
Front-Office

Routing bidirectionnel
<?
php
echo
link_to
(

$post
->
getTitle
(),

'@post?id=

.
$post
->
getId
(
)
) ?>
post
:

param
: { module:
blog
, action: show }

requirements
:

year
:

\d+

url:

/blog/
:id.html
<?
php
echo
url_for
(
'@homepage'
) ?>
homepage
:

param
: { module:
blog
, action:
recent
}
url:

/
/blog/1
.html
/
homepage
:

param
: { module:
blog
, action:
list
}
url:

/
recent
:

param
: { module:
blog
, action:
recent
}
url:

/recent
/
/recent
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Tests Fonctionnels

Scénario de navigation

//
test/functional/frontend/postActionsTest
.
php

$browser = new
sfTestBrowser
();

$browser
->
initialize
();
$browser
->

get
(
'/'
)
->

isStatusCode
(
200
)
->

checkResponseElement
(
'h1.
title'
,
'/PHP Québec/'
);
$ .
/symfony test-functional frontend
#
get
/
ok 1
-
status
code
is
200
not ok 2 -
response selector
h1

does
not match
regex
/PHP Québec/
# Looks
like you failed
1 tests of

2
1..2
TDD
Test Driven Development
CSS
Selector
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Notre première ligne de code
#
apps/frontend/modules/post/actions/actions
.class.
php
class
postActions extends sfActions
{

function executeShow
()
{

$id =
$this
-
>
getRequestParameter
(
'id'
);

$this
-
>
post =
PostPeer
::
retrieveByPk
($id);

$this
-
>
forward404Unless(
$this
-
>
post);
}
}
#
apps/frontend/modules/post/templates/showSuccess
.
php
<h1
class=
"title"
><?
php
echo

$post
->
getTitle
() ?></h1>
<h2>par <?
php
echo

$post
->
getAuthor
()
->
getFullName
() ?></h2>
<p><?
php
echo

$post
->
getHtmlContent
(ESC_RAW) ?></p>
MVC
Modèle
/
Vue
/
Contr
ôleur
XSS
Sécurité
par
défaut
raccourci
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Outils pour
débugger

Web Debug Toolbar
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Outils pour
débugger

Messages d

erreurs
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Déploiement
$ .
/symfony test-all
functional/frontend/postActionsTest
......................
ok
All tests
successful
.
Files=1, Tests=2
#
config/properties
.
ini
[production]

host=
1.2.3.4

user=
fabien

dir=
/var/www/sfblog

type=
rsync
$
.
/symfony sync
production go
$ ./symfony freeze
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Plugins
issus de la Communauté

De nouveaux
plugins
sont créés chaque semaine

Doctrine
: Full Doctrine ORM support

UJS
:
Unobtrusive JavaScript

PropelActAsNestedSetBehavior

:
Nested
sets for
Propel

SuperCache

: HTML pages cache

ControlPanel
: Web management for
symfony projects

ErrorLogger
: All 404
and
500
logging
in a table

Guard

:
Authentication and authorization features

Feed2
: Web
feeds
management

PokaYoke
: Client
side
validation
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Et maintenant ?

Forge : www.
symfony-forge
.
com

Nouvelles fonctionnalités
symfony
1.1 :

Plus de points d

extension pour les
plugins

Plus de modularité

Intégration Doctrine

Intégration

UJS

Nouvelle gestion des formulaires et de la validation

Traduction du livre officiel
ﮤ︈
, Deutsch,
Español
, Français
Polski,
Russian
,
ﳔﺊ
, Italiano
,

PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Un
Framework
pour les Professionnels

Issue de l

expérience

1.0 stable, maintenue et support commercial

Communauté large et compétente

Extensibilité

Stabilité de
l

API

Documentation
Une vision du Web
Professionnelle
Pragmatique
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Quelques Chiffres

3 ans de R&D

Version 1.0 stable

Support commercial

Documentation
Open-Source

Livre référence (450 pages - GFDL)

Tutorial pas à pas (250 pages)

Communauté importante

Développeurs dans 80 pays

100 000 visiteurs par mois
Mature
Reconnu
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
De Belles Références

Yahoo! (USA)

Yahoo!
Bookmarks

20 millions d

utilisateurs

Web 2.0 / AJAX
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
Rejoignez-nous

Sensio Labs
recrute en France

Des développeurs

D
es chefs de projet technique

Le Web est l

une de vos passions

?

Développeur
: Vous avez une expérience dans le
développement de sites Web en PHP voire en
symfony
. Vous développez en PHP5 objets, vous
connaissez l

AJAX.

Chef de Projet
: Vous
êtes développeur et vous
souhaitez gérer des projets pour des grands comptes.
PHP
Quebec
2007 www.
symfony-project
.
com
fabien.
potencier@sensio
.
com
www.
sensio
.
com
SENSIO S.A.
26, rue Salomon de Rothschild
92 286 SURESNES cedex
FRANCE
Tél
. : +33 1 40 99 80 80
Fax : +33 1 40 99 83 34
Contact
Fabien
Potencier
fabien.
potencier@sensio
.
com

http://www.
sensio
.
com/
http://www.
symfony-project
.
com/