Développer mieux en PHP avec. Forum PHP AFUP 2010



Documents pareils
Gérer ses environnements de développement avec Vagrant RMLL 2012

«Cachez-moi cette page!»

Nouveautés de Drupal 8. Léon

TP HTTP. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Webinar. Découvrez Rubedo, la première solution CMS open-source tirant profit des atouts de Zend Framework et du NoSQL. avec la participation de

Vulnérabilités et sécurisation des applications Web

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Hébergement de site web Damien Nouvel

Sécurisation d une application ASP.NET

Introduction. aux architectures web. de Single Sign-On

Préparation d un serveur Apache pour Zend Framework

Construire un réseau social avec Symfony Xavier Lacot Clever Age. Symfony Live 11 et 12 juin 2009 Clever Age Xavier Lacot

les techniques d'extraction, les formulaires et intégration dans un site WEB

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

GWT à l'épreuve du feu. by Sami Jaber (DNG Consulting)

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Devenez un véritable développeur web en 3 mois!

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

Module 7 : Configuration du serveur WEB Apache

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Introduction MOSS 2007

Tutoriel compte-rendu Mission 1

Résoudre les problèmes PHP, les meilleures (et les pires) techniques

2 Formation utilisateur

PHP 5.4 Développez un site web dynamique et interactif

CAHIER DES CHARGES SITE WEB : Steve Mind Magicien Close-up & Mentaliste - 1 -

+ = OpenStack Presentation. Raphaël Ferreira - enovance. Credits : Thanks to the OpenStack Guys 1

Serveur Subversion Debian GNU/Linux

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

Joomla! Création et administration d'un site web - Version numérique

PHP et LeMonde.fr : passé, présent et avenir Olivier Grange-Labat <grange@lemonde.fr>

Qu est ce que Visual Guard. Authentification Vérifier l identité d un utilisateur

WordPress, thèmes et plugins : mode d'emploi

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

L'AAA, késako? Bruno Bonfils, fr.org>, Novembre Sous ce terme d'apparence barbare est regroupé l'ensemble des concepts suivants :

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

Bonnes pratiques de développement JavaScript

Par l'exemple de. Laurent Destailleur

Automatisation de l administration système

Tour d horizon des CMS. Content Management System

3 chapitre Groupe Eyrolles, 2008

SERVEUR HTTP Administration d apache

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Groupe Eyrolles, 2004 ISBN :

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Mandataires, caches et filtres

SYSTÈMES D INFORMATIONS

Rapport de stage Clément MOYSAN

UE5A Administration Réseaux LP SIRI

TD4 - Supervision et métrologie des réseaux. 1 Supervision des applications et services réseaux et des ressources locales

ZABBIX est distribué sous licence GNU General Public License Version 2 (GPL v.2).

Single Sign-On open source avec CAS (Central Authentication Service)

Alfstore workflow framework Spécification technique

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Les frameworks, essentiels dans l'écosystème PHP

Découvrir Drupal, le CMS Open Source de référence. Michel-Marie MAUDET Linagora /

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Introduction aux concepts d ez Publish

Introduction. Littéralement : «Services de gestion des droits liés à l Active Directory» ADRMS Windows Serveur 2008 un nouveau rôle

PUPPET. Romain Bélorgey IR3 Ingénieurs 2000

Cursus 2013 Déployer un Content Management System

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

ORACLE 10g Découvrez les nouveautés. Jeudi 17 Mars Séminaire DELL/INTEL/ORACLE

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

Drupal, pour quel usage? Comment se positionne Drupal? Les fonctionnalités de Drupal et de son écosystème. L'architecture technique et logicielle Le

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

CYBERGATE -TP-APACHE_2.DOC

sshgate Patrick Guiran Chef de projet support

Utiliser Améliorer Prêcher. Introduction à LDAP

EXTENSION de Microsoft Dynamics CRM Réf FR 80452

Petit guide pour l installation de CVW sous Linux

RESUME DE CARRIERE. Alice JULIENNE. 23 ans Nationalité Française Développeur Web Front-End. Compétences

BTS SIO Dossier BTS. PURCHLA Romain

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Drupal un CMS orienté mé2er. Romain JARRAUD Mathieu GROS

Installation d un hébergement Web à domicile

Content Management System V.3.0. BlackOffice CMS V3.0 by ultranoir 1

Sécurité des applications web. Daniel Boteanu

REPARTITION DE CHARGE LINUX

Configurer la supervision pour une base MS SQL Server Viadéis Services

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Application Web et J2EE

La double authentification dans SharePoint 2007

arcopole Studio Annexe 7 Architectures Site du programme arcopole :

Transcription:

Développer mieux en PHP avec Forum PHP AFUP 2010

Qui suis- je? v Hugo HAMON (@hhamon) v v Responsable des formations à 8 ans de PHP v Secrétaire de l AFUP v Auteur du site Apprendre-PHP.com v Coauteur & contributeur à des ouvrages Eyrolles

Symfony, un framework professionnel!

Le projet symfony symfony 1.0 symfony 1.4 Symfony 2.0 License MIT Version actuelle 1.0.22 1.4.8 2.0.0 - Alpha Date de sortie Octobre 2005 Novembre 2009 Mars 2011 Support Terminé Fin 2012? Stabilité Stable Stable Pas stable Production Oui Oui Bientôt Documentation Oui Oui En cours

Un riche écosystème Ø Documentation Open-Source Ø API stable et fiable Ø Communauté active Ø Plugins Open-Source Ø Développeurs sur le marché Ø Formation & Consulting

Ils utilisent symfony

Symfony pour résoudre les problématiques du développement web.

1. Industrialiser les développements

Coût de développement Développement Dv $ Test T

Coût de maintenance Compréhension C Modification Test M T $$$ Déploiement D

Coût Développement Coût Maintenance Déploiement Test Test Correction Développement Compréhension

Moins de Code Objectifs? Moins de complexité Moins de bogues Plus de Productivité Plus de temps

Automatiser des tâches pénibles

Déboguer plus vite Web Debug Toolbar

² Requêtes SQL ² Logs ² Variables d environnement ($_GET, $_POST, $_COOKIE ) ² Configuration de PHP ² Timers ² Variables de configuration de Symfony

Stack traces

Déboguer plus vite (Symfony2) Profiler

Journalisation des logs ² Requêtes SQL, en-têtes envoyés, exceptions attrapées

Simplifier les déploiements Déploiement automatisé avec une connexion RSYNC / SSH $ php symfony project:deploy production --go Configuration des serveurs de déploiement dans un fichier INI [production] host=123.456.7.8 user=hhamon port=22 path=/var/www/www.monsite.com

2. Favoriser le travail en équipe

Arborescence connue $ tree -L 1 -F. -- apps/ -- cache/ -- config/ -- data/ -- lib/ -- log/ -- plugins/ -- symfony* -- test/ `-- web/ 9 directories, 1 file q Applications q Cache q Configuration globale q Données du projet q Classes PHP q Journaux de logs q Plugins installés q Tests automatisés q Fichiers publics

Architecture MVC

Couche Contrôleur : # apps/frontend/modules/post/actions/actions.class.php class postactions extends sfactions { public function executeindex(sfwebrequest $request) { $this->posts = PostTable::getInstance()->getMostRecent(10); } } Couche Vue : # apps/frontend/modules/post/templates/indexsuccess.php <?php foreach ($posts as $post) :?> <h2><?php echo $post->gettitle()?></h2> <div class="content"> <?php echo simple_format_text($post->getcontent())?> </div> <?php endforeach?>

Couche Modèle (Doctrine ORM) : # lib/model/doctrine/posttable.class.php class PostTable extends Doctrine_Table { public function getmostrecent($limit) { return $this-> createquery('a')-> where('a.is_published =?', true)-> orderby('a.published_at desc')-> limit($limit)-> execute(); } }

3. Ne pas réinventer la roue

Configuration des URLs URL PHP http://www.domain.tld/blog.php?action=show&id=12546 URL Symfony http://www.domain.tld/blog/2010/11/09/symfony-rocks q Optimisation pour les SEO q Faciles à bookmarker, mémoriser ou échanger q Masquent l implémentation technique

Configuration YAML des URLs signin: url: /:sf_culture/login param: { module: authentication, action: login } requirements: { sf_culture: (?:en fr) } signout: url: /:sf_culture/logout param: { module: authentication, action: logout } requirements: { sf_culture: (?:en fr) } my_account: url: /:sf_culture/account param: { module: home, action: showaccount } requirements: { sf_culture: (?:en fr) } products: url: /:sf_culture/shop/:page param: { module: product, action: index, page: 1 } requirements: { sf_culture: (?:en fr), page: \d+ }

Accès aux bases de données Projets matures Pilotés par F. Zaninotto & J. Wage Abstraction de BDD & ORM Couche basse : PDO Nombreuses BDD supportées Génération de code et behaviors API abstraite et OO de requêtes SQL Migrations

ORM / Active Record $speaker = new Speaker(); $speaker->setfirstname('hugo'); $speaker->setlastname('hamon'); $conference = new Conference(); $conference->setspeaker($speaker); $conference->settitle('introduction à symfony'); $conference->setschedule('2010-11-10 09:00:00'); $conference->save(); Sauvegarde des deux enregistrements en BDD

Traitement des formulaires Simplifier la création et la validation des formulaires API entièrement orientée objet Flexible et extensible Intégration avec les ORMs Nombreux validateurs et «widgets» livrés Simplicité d utilisation pour les intégrateurs web

class ContactForm extends sfform { public function configure() { $this->setwidgets(array( 'email' => new sfwidgetforminputtext(), 'message' => new sfwidgetformtextarea() )); $this->setvalidators(array( 'email' => new sfvalidatoremail(), 'message' => new sfvalidatorstring() )); } } $this->widgetschema->setnameformat('contact[%s]');

class contactactions extends sfactions { public function executeprocessform(sfwebrequest $request) { $this->forward404unless($request->getmethod('post')); $this->form = new ContactForm(); $this->form->bind($request->getparameter('contact')); if ($this->form->isvalid()) { $values = $this->form->getvalues(); //... do something } } } $this->redirect('contact/thankyou');

I18N & L10N Sites multilingues Formatage de dates, monnaies, nombres Gestion des pluriels Localisation des chaînes de l interface Support des tables I18N par les ORMs Gestion automatique de la culture de l utilisateur

I18N & L10N <p> <?php echo ('Hello, my name is %name%', array( '%name%' => 'Hugo ))?>. </p> <p> It costs <?php echo format_currency(125990, 'EUR')?>. </p> <p> There are <?php echo format_number(1350)?> people here. </p>

Authentification et ACLs Authentification de l utilisateur $user->setauthenticated(true); $user->isauthenticated(); Gestion des droits d accès $user->addcredentials(array('author', 'PUBLISHER')); $user->hascredential('publisher');

Envoi d emails Intégration de Swift Mailer API orientée objet Flexible et extensible Support des files d attente de mails Entièrement configurable Intégration avec les ORMs

Envoi d emails $mail = $this->getmailer()->compose( 'you@example.com', 'me@example.com', 'Hell You!', "Hey guy, what's up?" ); $mail->setpriority(3); $mail->attach(swift_attachment::frompath('file.pdf')); $this->getmailer()->send($mail); Le mailer est entièrement configurable

4. Sécurité de l application

Sécurité q Echappement automatique des variables de vue q Sécurisation des formulaires avec des jetons uniques q Requêtes préparées par les ORMs $speaker = Doctrine_Query::create()-> from('speaker s')-> where('s.last_name LIKE?', '%Hamon%')-> fetchone();

Configuration d Apache q Accès au répertoire web/ depuis un navigateur <VirtualHost *:80> ServerName www.my-domain.com DocumentRoot "/path/to/symfonyproject/web" <Directory "/path/to/symfonyproject/web"> AllowOverride All Allow from All </Directory> Alias /sf /path/to/symfonyproject/lib/vendor/symfony/data/web/sf <Directory "/path/to/symfonyproject/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> </VirtualHost>

5. Générer des backoffices

Admin Generator q Génération de backoffice q Liste q Ajout q Modification q Filtres de recherche q Pagination q Entièrement configurable q Gestion des droits d accès q Suppression

Admin Generator $ php symfony doctrine:generate-admin backend Product

Configuration en YAML generator: class: sfdoctrinegenerator param: #... config: actions: _edit: { credentials: [ADMIN_PRODUCTS] } fields: name: { label: Nom du produit } reference: { label: Référence } price: { label: Prix } is_published: { label: Publication? } categories_list: { label: Catégories } list: batch_actions: unlinkcategories: credentials: [[ADMIN_PRODUCTS, EDIT_PRODUCT]] label: Rendre orphelins _delete: credentials: [ADMIN_PRODUCTS]

6. Etendre les fonctionnalités

Ligne de commandes q Le framework de tâches automatisées peut accueillir de nouvelles commandes personnalisées.

Ligne de commandes class sfguardaddpermissiontask extends sfbasetask { protected function configure() { //... } $this->namespace = 'guard'; $this->name = 'add-permission'; $this->briefdescription = 'Adds a new permission'; protected function execute($arguments = array(), $options = array()) { //... } }

Plugins communautaires q Près d un millier de plugins disponibles q Faciles à installer et à utiliser

7. Garantir la qualité du code

Tests unitaires q Symfony 1.x : Lime q Symfony 2.x : PHPUnit 3.5 q Vérifier que le code est correct q Faciliter la détection des bogues et des régressions q Documenter le code

Tests unitaires

Tests fonctionnels q Vérifier les fonctionnalités de l application q Simuler un scénario de navigation sur le site q Tester toutes les couches (request, response, user ) q API qui simule un véritable navigateur web q Syntaxe verbeuse et intuitive

Tests fonctionnels include(dirname( FILE ).'/../../bootstrap/functional.php'); $browser = new sftestfunctional(new sfbrowser()); $browser-> get('/en/contact')-> with('response')->isstatuscode(200)-> click('send', array( 'contact' => array( 'name' => '', 'email' => 'foo', 'message' => 'Lorem ipsum...' ) ), array('_with_csrf' => true));

Tests fonctionnels

8. Performances & scalabilité

Rôle du cache de symfony q Cache de la configuration YAML q Cache des dictionnaires de traduction XLIFF q Cache des pages HTML q Cache des requêtes SQL (Doctrine) q => Répondre plus vite à une requête HTTP

Cache de Symfony2 q Cache HTTP q Très performant q Plus flexible q Performances accrues avec un Reverse Proxy q Support des ESI Edge Side Includes RFC 2616

Surcharge du coeur q Possibilité de redéfinir la configuration de symfony q Ex : Request, Response, User, Cache, I18N, Mailer dev: mailer: param: delivery_strategy: none transport: class: Swift_NullTransport

9. Contribuer à Symfony

Contribuer au projet q Documentation (blog, traductions ) q Canaux de discussion (IRC, forums, mailing lists, twitter) q Code source (patch, bogues) q Plugins q Conférences q Bouche à oreille

On recrute! Sensio S.A. 92-98, boulevard Victor Hugo 92 115 Clichy Cedex FRANCE Tél. : +33 1 40 99 80 80 www.sensiolabs.com - www.symfony-project.org - trainings.sensiolabs.com