# data[].attributes.body
OpenClassrooms

# data[].attributes.attachment_link.description
"Program or be programmed" : avoir la capacité de comprendre, créer ou modifier des logiciels permet de devenir acteur du monde numérique qui nous entoure. Ce cours vous donnera les bases pour programmer avec le langage standard du Web : JavaScript.

# data[].attributes.body
GitBook

# data[].attributes.attachment_link.title
Programmation orientée objet en C# · GitBook (Legacy)

# data[].attributes.attachment_link.description
programmation-orientee-objet-csharp: Ce livre est une introduction à la programmation orientée objet. Il présente de manière progressive et illustrée les concepts essentiels et les savoir-faire associés.

# data[].attributes.attachment_link.authors[].name
Luc Sanchez Titulaire d'un Certificat Professionnel Programmation de sites web CP09 (cnam), je ne suis jamais loin d'un clavier et d'une souris.

# data[].attributes.attachment_link.authors[].name
Baptiste Pesquet Ingénieur et professeur agrégé, j'enseigne l'informatique et ses applications à l'Ecole Nationale Supérieure de Cognitique.

# data[].attributes.attachment_link.title
Évoluez vers une architecture PHP professionnelle avec Silex

# data[].attributes.attachment_link.description
Le langage PHP a évolué. Comment exploiter ses nouvelles fonctionnalités et choisir les bons outils de développement ? C'est le double objectif de ce cours, qui vous guidera pas à pas dans la mise en place d'une architecture PHP professionnelle.

# data[].attributes.headline
Premiers pas avec le framework PHP Silex

# data[].attributes.subject
Premiers pas avec le framework PHP Silex

# data[].attributes.attachment_link.readable_text
Ce cours vise à se familiariser avec le framework PHP Silex par la pratique, en écrivant une application Web basique.

Pré-requis

Pour bien suivre ce cours, vous devez :

Connaître les bases du langage PHP. Si vous êtes un débutant PHP complet, commencez par vous familiariser avec ce langage. Pour cela, je vous conseille les tutoriels d' OpenClassrooms ou de Codecademy.

Disposer d'une machine de développement incluant le serveur Web Apache.

Présentation de Silex

Silex est un micro-framework PHP développé par la société française SensioLabs, créatrice du framework Symfony. Silex est en quelque sorte le petit frère de Symfony et les deux frameworks reposent sur les mêmes composants.

Contrairement à Symfony qui fournit (et impose) une architecture complète (dite " full stack "), Silex est un framework minimaliste qui laisse beaucoup de liberté au développeur. C'est pourquoi on peut le qualifier de micro-framework. Il fournit un ensemble réduit de services au-dessus desquels on peut développer une application Web. Son minimalisme le rend idéal pour s'initier en douceur au fonctionnement d'un framework PHP.

Silex dispose d'une documentation en ligne assez complète. Dans ce tutoriel, nous allons nous contenter de l'utiliser pour afficher un simple message "Hello World" à l'utilisateur.

Installation de Silex

L'installation de Silex peut s'effectuer de deux manières :

Nous allons utiliser la seconde solution, plus formatrice : Composer est un outil essentiel que tout développeur PHP sérieux se doit de connaître.

Introduction à Composer

Composer est un outil qui permet de définir des dépendances entre des projets PHP (exemple : "mon projet a besoin de Silex") et de récupérer automatiquement les fichiers associés.

Pour fonctionner, Composer doit être installé sur la machine de développement. Vous trouverez plus de détails, ainsi que la procédure d'installation, en consultant sa documentation.

Si vous êtes sous Windows, la solution la plus simple consiste à utiliser l'assistant d'installation de Composer, téléchargeable à cette adresse, puis à vous laisser guider. Au cours de l'installation, vous devrez indiquer le chemin du fichier exécutable php.exe. Son emplacement dépend de la façon dont PHP est installé votre machine. Avec XAMPP, il se trouve dans le répertoire c:\xampp\php.

Si vous êtes sous Mac OS X ou Linux, je vous conseille d'effectuer une installation globale afin que la commande composer soit disponible en ligne de commande.

Une fois l'installation terminée, vérifiez que Composer est utilisable sur votre machine en ouvrant une fenêtre de terminal puis en tapant simplement :

Si l'installation de Composer a réussi, vous obtenez la description des options utilisables.

Création du fichier de dépendances

Une fois Composer installé, il faut créer un fichier de dépendances pour exprimer le fait que notre projet a besoin de Silex pour fonctionner.

Dans un premier temps, nous allons travailler directement dans le répertoire servi par votre serveur Web local. Son emplacement dépend de votre installation. Voici quelques emplacements possibles :

Créez dans ce répertoire un sous-répertoire nommé hello-world-silex qui sera le répertoire racine de notre application Web. Déplacez-vous dans ce répertoire puis créez un fichier texte nommé composer.json . Ensuite, copiez-collez le texte ci-dessous dans ce fichier.

{ "require": { "silex/silex": "1.3.*" } }

Ce fichier va être lu par Composer, qui va en déduire que le projet courant nécessite Silex (plus précisément : la plus récente des versions 1.3) et va récupérer automatiquement les fichiers nécessaires.

Récupération de Silex via Composer

Ouvrez une fenêtre de terminal et déplacez-vous dans le répertoire hello-world-silex créé plus haut. Ensuite, lancez la commande ci-dessous :

composer install

Si tout va bien, Composer va télécharger les fichiers de Silex dans un sous-répertoire nommé vendor du répertoire courant. Pourquoi ce nom ? Il s'agit d'une convention standard : dans un projet PHP, le répertoire vendor rassemble le code issu de projets tiers.

Téléchargement des composants Silex via Composer

Voici à présent l'arborescence de notre projet. On vérifie au passage que Silex repose sur certains composants du framework Symfony, regroupés dans le sous-répertoire symfony du répertoire vendor .

Arborescence de Silex

Si vous êtes curieux(se), c'est le moment d'aller examiner le code source de ces composants... Heureusement, cette étape n'est pas indispensable pour utiliser Silex ou Symfony.

Aperçu du fonctionnement de Silex

Un premier exemple

Maintenant que Silex est installé, il est temps de voir comment l'utiliser. Pour cela, créez dans hello-world-silex un sous-répertoire web , puis créez dans web un fichier index.php . Copiez/collez le code ci-dessous dans ce fichier.

<?php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); $app->get('/', function () { return 'Hello world'; }); $app->run();

Le fichier vendor/autoload.php est généré automatiquement par Composer. En l'incluant dans notre fichier source au moyen de l'instruction PHP require_once, on peut ensuite utiliser tous les éléments PHP définis dans les sous-répertoires de vendor . L'intérêt de cette pratique est expliqué dans cet article.

__DIR__ est une constante magique PHP qui contient le chemin absolu du dossier qui contient le fichier PHP courant.

Le reste du code source du fichier index.php instancie un objet nommé $app , puis définit ce qu'on appelle une route.

Une route est un point d'entrée dans une application Web. Elle définit une correspondance entre une URL et une action de l'application.

La route définie ici renvoie le texte "Hello world" lorsque l'URL racine de l'application (/) est demandée. La syntaxe utilisée pour définir l'action peut sembler déroutante à première vue. Il s'agit d'une fermeture ( closure), une fonction définie à l'intérieur du corps d'une autre fonction. Ce concept existe dans de nombreux langages.

Test de l'exemple

Afin de contrôler que notre exemple fonctionne, vérifiez que votre serveur Web local est lancé puis tapez l'URL http://localhost/hello-world-silex/web/index.php dans votre navigateur Web favori.

Vous devriez obtenir l'affichage du texte "Hello world" dans le navigateur.

Initiation au routage avec Silex

Pour l'instant, notre application Web ne dispose que d'un point d'entrée. Ajoutons-en un autre en ajoutant une nouvelle route dans le fichier index.php .

<?php require_once __DIR__.'/../vendor/autoload.php'; $app = new Silex\Application(); $app->get('/', function () { return 'Hello world'; }); $app->get('/hello/{name}', function ($name) use ($app) { return 'Hello ' . $app->escape($name); }); $app->run();

Cette nouvelle route correspond à une URL de type /hello/nom . La partie de l'URL située après /hello/ est passée à l'action sous la forme d'un paramètre nommé $name.

L'action associée à la nouvelle route construit le message affiché par concaténation. L'URL /hello/Bob affichera le message "Hello Bob". Elle utilise la méthode escape, qui permet d'éviter les injections de code dans le résultat généré.

Pour tester la nouvelle route, pointez votre navigateur vers http://localhost/hello-world-silex/web/index.php/hello/Bob et vérifiez que vous obtenez le message prévu.

Simplification des URL

Vous aurez noté que les URL de notre application Web commencent toutes par /web/index.php , ce qui est peu pratique. Plutôt que devoir écrire http://localhost/hello-world-silex/web/index.php/hello/Bob, on aimerait pouvoir écrire http://localhost/hello-world-silex/hello/Bob.

Nous allons aller plus loin et faire en sorte que l'application réponde à une URL de la forme http://hello-world-silex/hello/Bob. Cela nécessite de modifier la configuration du serveur Web local, qui sera Apache dans notre exemple.

Définition d'un hôte virtuel

La première étape est de définir un hôte virtuel ( virtual host). Le principe des hôtes virtuels est de définir plusieurs serveurs logiques sur un même serveur physique. Vous trouverez tous les détails sur les hôtes virtuels dans la documentation Apache.

Sous Windows et Mac OS X

La configuration d'un hôte virtuel Apache sous Windows et Mac OS X nécessite l'édition du fichier de configuration httpd-vhosts.conf . Son emplacement dépend de l'installation d'Apache :

Ouvrez ce fichier avec un éditeur de texte puis ajoutez le contenu ci-dessous à la fin en adaptant les lignes commençant par DocumentRoot et Directory à votre configuration locale.

<VirtualHost *:80> DocumentRoot "C:\xampp\htdocs" ServerName localhost </VirtualHost> <VirtualHost *:80> DocumentRoot "C:\xampp\htdocs\hello-world-silex\web" ServerName hello-world-silex <Directory "C:\xampp\htdocs\hello-world-silex\web"> AllowOverride all </Directory> </VirtualHost>

Le premier hôte virtuel redéfinit localhost, ce qui est nécessaire quand on rajoute des hôtes virtuels sous Apache. Le second crée un hôte virtuel associé au nom hello-world-silex et dont la racine est le répertoire hello-world-silex/web .

Ensuite, éditez le fichier principal de configuration apache. Il se nomme httpd.conf et se trouve dans le répertoire de configuration d'Apache (exemples : c:\xampp\apache\conf avec XAMPP sous Windows, /Applications/MAMP/conf/apache avec MAMP sous Mac OS X). Dans ce long fichier, vérifiez que la ligne incluant le fichier httpd-vhosts.conf est bien décommentée (absence de '#' au début de la ligne), et décommentez-là au besoin.

Voici le résultat à obtenir avec XAMPP sous Windows :

# Virtual hosts Include conf/extra/httpd-vhosts.conf

Et voici le résultat à obtenir avec MAMP sous Mac OS X.

# Virtual hosts Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

Pour que la nouvelle configuration soit prise en compte, il faut redémarrer le serveur Web Apache. Faites-le maintenant.

Sous Linux

La configuration d'un hôte virtuel Apache sous Linux se fait en ajoutant un fichier de configuration dans le répertoire /etc/apache2/sites-available . La procédure est décrite en détail dans la documentation Ubuntu. Le fichier à ajouter se nommera ici hello-world-silex.conf et pourra avoir le contenu suivant (dans cet exemple, le dossier servi par Apache est le répertoire /var/www/html).

<VirtualHost *:80> ServerName hello-world-silex DocumentRoot /var/www/html/hello-world-silex/web <Directory "/var/www/html/hello-world-silex/web"> AllowOverride all Require all granted </Directory> </VirtualHost>

Il faut ensuite activer le nouvel hôte virtuel en lançant la commande suivante.

sudo a2ensite hello-world-silex.conf

Elle a pour effet de créer dans le répertoire /etc/apache2/sites-enabled un lien symbolique qui pointe vers le fichier /etc/apache2/sites-available/hello-world-silex.conf .

Pour que la nouvelle configuration soit prise en compte, il faut redémarrer le serveur Web Apache. Faites-le maintenant à l'aide de la commande ci-dessous.

sudo service apache2 restart

Modification des informations DNS

Une fois l'hôte virtuel créé et quel que soit votre système d'exploitation, il faut ajouter une information au fichier hosts local pour que la résolution DNS pointe sur la machine locale (127.0.0.1). Là encore, l'emplacement de ce fichier dépend de votre système :

La modification de ce fichier nécessite des droits d'administrateur. Si vous êtes sous Windows, lisez cet article pour savoir comment les obtenir.

Editez ce fichier afin d'y ajouter la ligne ci-dessous.

127.0.0.1 hello-world-silex

Une fois le fichier hosts modifié, l'application doit répondre à l'URL http://hello-world-silex avec le message "Hello world".

Reécriture des URL à la volée

Si vous tentez maintenant d'accéder à l'URL http://hello-world-silex/hello/Bob, vous obtenez un message d'erreur de notre navigateur. Afin de rendre ce type d'URL fonctionnel, il faut rediriger toutes les requêtes entrantes vers le fichier index.php écrit précédemment.

Sous Apache, cela passe par la définition d'un fichier de réécriture d'URL ( URL rewriting) nommé .htaccess et situé dans le répertoire hello-world-silex/web . Créez ce fichier puis copiez/collez-y le texte ci-dessous.

# Redirect incoming URLs to index.php <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] </IfModule>

A présent, l'URL http://hello-world-silex/hello/Bob doit afficher le message de bienvenue. Notre application Web est fonctionnelle !

Si vous rencontrez une erreur de la forme "The requested URL was not found on this server" alors que vous avez bien suivi les étapes précédentes, c'est probablement que le module de réécriture d'URL n'est pas activé dans la configuration d'Apache.

Sous Windows et Mac OS X, éditez le fichier httpd.conf et décommentez la ligne suivante.

LoadModule rewrite_module modules/mod_rewrite.so

Sous Linux, exécutez la commande ci-dessous.

sudo a2enmod rewrite

Redémarrez ensuite Apache et refaites le test.

Conclusion

Dans ce tutoriel, nous avons posé les bases d'une application Web utilisant le framework PHP Silex. Les étapes essentielles de l'installation de Silex et de la configuration du serveur Web sont réalisées. Il ne reste plus qu'à enrichir l'application en lui ajoutant des routes ainsi que les actions associées.

Cette évolution sera aisée : l'un des intérêts d'un micro-framework comme Silex est qu'il est très facile d'ajouter à l'application Web de nouveaux services (exemples : gestion de la persistance, de la sécurité, moteur de templates) et d'améliorer son architecture afin de répondre aux besoins qui apparaîtront pendant le cycle de vie du logiciel.

Si vous souhaitez aller plus loin avec Silex, le cours OpenClassrooms Evoluez vers une architecture PHP professionnelle décrit en détail la construction d'une application Web autour de ce framework.

# data[].attributes.attachment_link.authors[].name
Baptiste Pesquet Ingénieur et professeur agrégé, j'enseigne l'informatique et ses applications à l'Ecole Nationale Supérieure de Cognitique.

# data[].attributes.attachment_link.title
Premiers pas avec le framework PHP Silex

# data[].attributes.attachment_link.description
Ce cours vise à se familiariser avec le framework PHP Silex par la pratique, en écrivant une application Web basique. Pour bien suivre ce cours, vous devez : Connaître les bases du langage PHP. Si vous êtes un débutant PHP complet, commencez par vous familiariser avec ce langage.

# data[].attributes.headline
Créez des pages web interactives avec JavaScript

# data[].attributes.subject
Créez des pages web interactives avec JavaScript

# data[].attributes.body
OpenClassrooms

# data[].attributes.attachment_link.title
Créez des pages web interactives avec JavaScript

# data[].attributes.attachment_link.description
JavaScript est avant tout le langage de programmation du Web. C'est grâce à lui que vos sites préférés deviennent vivants et interactifs. Ce cours vous apprendra à utiliser JavaScript pour améliorer l'expérience de l'utilisateur sur le Web.

# data[].attributes.body
Blablabla
Blablabla
Blablabla