Skip to content

Book/http fundamentals patch #785

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 43 additions & 40 deletions book/http_fundamentals.rst
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
.. index::
single: Symfony2 Fundamentals
single: Symfony Fundamentals

Les fondamentaux de Symfony2 et HTTP
Les fondamentaux de Symfony et HTTP
====================================

Félicitations! Grâce à l'apprentissage de Symfony2, vous êtes sur la bonne voie pour
Félicitations! Grâce à l'apprentissage de Symfony, vous êtes sur la bonne voie pour
devenir un développeur web plus *productif* et *populaire* (en fait la popularité
ne dépend que de vous). Symfony2 est construit de manière à revenir à
ne dépend que de vous). Symfony est construit de manière à revenir à
l'essentiel : implémenter des outils qui vous aident à développer plus rapidement
et à construire des applications plus robustes, sans pour autant vous gêner dans votre
progression.
Expand All @@ -15,10 +15,10 @@ et concepts que vous êtes sur le point d'apprendre représentent les efforts de
milliers de personnes depuis de nombreuses années. En d'autres termes, vous
n'apprenez pas juste "Symfony", vous apprenez les fondamentaux du web,
les bonnes pratiques de développement, et comment utiliser de nombreuses
nouvelles bibliothèques PHP, internes ou indépendantes de Symfony2. Alors,
nouvelles bibliothèques PHP, internes ou indépendantes de Symfony. Alors,
soyez prêt !

Fidèle à la philosophie de Symfony2, ce chapitre débute par une explication du
Fidèle à la philosophie de Symfony, ce chapitre débute par une explication du
concept fondamental du développement web : HTTP. Quelles que soient vos
connaissances ou votre langage de programmation préféré, ce chapitre **doit
être lu** par tout un chacun.
Expand All @@ -41,9 +41,9 @@ le web, le but de votre serveur est *toujours* de comprendre de simples
requêtes composées de texte, et de retourner de simples réponses composées
elles aussi de texte.

Symfony2 est construit sur les bases de cette réalité. Que vous le
Symfony est construit sur les bases de cette réalité. Que vous le
réalisiez ou non, HTTP est quelque chose que vous utilisez tous les jours.
Avec Symfony2, vous allez apprendre comment le maîtriser.
Avec Symfony, vous allez apprendre comment le maîtriser.

.. index::
single: HTTP; Request-response paradigm
Expand Down Expand Up @@ -103,8 +103,9 @@ requête HTTP pour supprimer une entrée spécifique d'un blog, par exemple:

Il y a en fait neuf méthodes HTTP définies par la spécification HTTP,
mais beaucoup d'entre elles ne sont pas largement utilisées ou supportées.
En réalité, beaucoup de navigateurs modernes ne supportent pas les méthodes
``PUT`` et ``DELETE``.
En réalité, beaucoup de navigateurs modernes ne supportent que les méthodes
``POST`` et ``GET`` dans les formulaires HTML. Diverses autres sont toutefois
prises en charge dans les XMLHttpRequests, ainsi que dans le routeur de Symfony.

En plus de la première ligne, une requête HTTP contient invariablement
d'autres lignes d'informations appelées entêtes de requête. Les entêtes
Expand Down Expand Up @@ -153,9 +154,9 @@ la page Wikipedia `Liste des codes HTTP`_ .
Comme la requête, une réponse HTTP contient de l'information additionnelle
sous forme d'entêtes HTTP. Par exemple, ``Content-Type`` est un entête
de réponse HTTP très important. Le corps d'une même ressource peut être retournée
dans de multiples formats incluant HTML, XML ou JSON et l'entête ``Content-Type``
utilise les Internet Media Types, comme ``text/html``, pour dire au client quel format
doit être retourné. Une liste des médias types les plus communs peut être trouvée sur
dans de multiples formats tels que HTML, XML ou JSON et l'entête ``Content-Type``
utilise les Internet Media Types, comme ``text/html``, pour dire au client le format
qui est retourné. Une liste des médias types les plus communs peut être trouvée sur
la page Wikipedia `Liste de media type usuels`_.

De nombreuses autres entêtes existent, dont quelques-uns sont très puissants.
Expand Down Expand Up @@ -186,7 +187,7 @@ Symfony est conçu pour correspondre à cette réalité.
pour Firefox `Live HTTP Headers`_.

.. index::
single: Symfony2 Fundamentals; Requests and responses
single: Symfony Fundamentals; Requests and responses

Requêtes et réponses en PHP
---------------------------
Expand Down Expand Up @@ -279,7 +280,7 @@ est connecté via une connexion sécurisée (c-a-d ``https``).

La classe Request a aussi une propriété publique ``attributes`` qui contient
des données spéciales liées au fonctionnement interne de l'application. Pour
le framework Symfony2, la propriété ``attributes`` contient les valeurs retournées
le framework Symfony, la propriété ``attributes`` contient les valeurs retournées
par la route identifiée, comme ``_controller``, ``id`` (si vous utilisez le joker ``{id}``),
et même le nom de la route (``_route``). La propriété ``attributes`` existe pour
vous permettre d'y stocker des informations spécifiques liées au contexte de
Expand All @@ -292,16 +293,17 @@ interface orientée objet pour construire la réponse qui doit être retournée
au client::

use Symfony\Component\HttpFoundation\Response;

$response = new Response();

$response->setContent('<html><body><h1>Hello world!</h1></body></html>');
$response->setStatusCode(200);
$response->setStatusCode(Response::HTTP_OK);
$response->headers->set('Content-Type', 'text/html');

// affiche les entêtes HTTP suivies du contenu
$response->send();

Si Symfony n'offrait rien d'autre, vous devriez néanmoins déjà avoir en votre
Si Symfony n'offrait rien d'autre, vous devriez déjà avoir en votre
possession une boîte à outils pour accéder facilement aux informations de la
requête et une interface orientée objet pour créer la réponse. Bien que vous
appreniez les nombreuses et puissantes fonctions de Symfony, gardez à l'esprit
Expand Down Expand Up @@ -364,7 +366,7 @@ votre application. Par exemple:

.. tip::

En utilisant la fonction ``mod_rewrite`` d'Apache (ou son équivalent
En utilisant le module ``mod_rewrite`` d'Apache (ou son équivalent
avec d'autres serveurs web), les URLs peuvent être facilement réécrites
afin de devenir simplement ``/``, ``/contact`` et ``/blog``.

Expand All @@ -387,15 +389,16 @@ parties de votre code selon cette valeur. Cela peut rapidement devenir moche::
// index.php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$request = Request::createFromGlobals();
$path = $request->getPathInfo(); // Le chemin de l'URI demandée

if (in_array($path, array('', '/'))) {
$response = new Response('Bienvenue sur le site.');
} elseif ($path == '/contact') {
$response = new Response('Bienvenue sur la page d'accueil.');
} elseif ('/contact' == $path) {
$response = new Response('Contactez nous');
} else {
$response = new Response('Page non trouvée.', 404);
$response = new Response('Page non trouvée.', Response::HTTP_NOT_FOUND);
}
$response->send();

Expand All @@ -412,17 +415,17 @@ Symfony suit un schéma simple et identique pour toutes les requêtes :

.. figure:: /images/request-flow.png
:align: center
:alt: Le déroulement d'une requête Symfony2
:alt: Le déroulement d'une requête Symfony

Les requêtes entrantes sont interprétées par le routing et passées aux
fonctions des contrôleurs qui retournent des objets ``Response``.

Chaque « page » de votre site est définie dans un fichier de configuration du
routing qui relie différentes URLs à différentes fonctions PHP. Le travail de
chaque fonction PHP, appelée :term:`contrôleur`, est de créer puis retourner
un objet ``Response``, construit à partir des informations de la requête, à l'aide
des outils mis à disposition par le framework. En d'autres termes, le contrôleur
est le lieu où *votre* code se trouve : c'est là que vous interprétez la requête et
chaque fonction PHP, appelée :term:`contrôleur`, est de créer puis retourner
un objet ``Response``, construit à partir des informations de la requête, à l'aide
des outils mis à disposition par le framework. En d'autres termes, le contrôleur
est le lieu où *votre* code se trouve : c'est là que vous interprétez la requête et
que vous créez une réponse.

C'est si facile ! Revoyons cela :
Expand Down Expand Up @@ -505,7 +508,7 @@ apprendre comment un contrôleur peut retourner des templates, permettant à vot
séparé. Cela libère le contrôleur et lui permet de s'occuper seulement des choses complexes :
interagir avec la base de données, gérer les données soumises, ou envoyer des emails.

Symfony2: Construisez votre application, pas vos outils
Symfony: Construisez votre application, pas vos outils
-------------------------------------------------------

Vous savez maintenant que le but de toute application est d'interpréter
Expand All @@ -518,21 +521,21 @@ des emails, valider des entrées d'utilisateurs et gérer la sécurité.

La bonne nouvelle est qu'aucun de ces problèmes n'est unique. Symfony fournit
un framework rempli d'outils qui vous permettent de construire votre
application, mais pas vos outils. Avec Symfony2, rien ne vous est imposé :
application, pas vos outils. Avec Symfony, rien ne vous est imposé :
vous êtes libre d'utiliser le framework Symfony en entier, ou juste une partie
de Symfony indépendamment.

.. index::
single: Symfony2 Components
single: Symfony Components

Outils Autonomes: Les *Composants* Symfony2
Outils Autonomes: Les *Composants* Symfony
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Donc *qu'est-ce* que Symfony2? Premièrement, Symfony2 est une collection de plus
Donc *qu'est-ce* que Symfony? Premièrement, Symfony est une collection de plus
de vingt bibliothèques indépendantes qui peuvent être utilisées dans *n'importe quel*
projet PHP. Ces bibliothèques, appelées les *Composants Symfony2*, contiennent
projet PHP. Ces bibliothèques, appelées les *Composants Symfony*, contiennent
des choses utiles en toute situation, quelle que soit
la manière dont votre projet est développé. Pour en nommer quelques-unes :
la manière dont votre projet est développé. Pour en citer quelques-unes :


* :doc:`HttpFoundation</components/http_foundation/introduction>` - Contient les classes
Expand Down Expand Up @@ -565,31 +568,31 @@ la manière dont votre projet est développé. Pour en nommer quelques-unes :
votre application.

Chacun de ces composants est découplé et peut être utilisé dans *n'importe quel*
projet PHP, que vous utilisiez le framework Symfony2 ou non.
projet PHP, que vous utilisiez le framework Symfony ou non.
Chaque partie est faite pour être utilisée en cas de besoin et remplacée quand cela
est nécessaire.

La Solution Complète: Le *Framework* Symfony2
La Solution Complète: Le *Framework* Symfony
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Donc finalement, *qu'est-ce* que le *Framework* Symfony2 ? Le *Framework Symfony2*
Donc finalement, *qu'est-ce* que le *Framework* Symfony ? Le *Framework Symfony*
est une bibliothèque PHP qui accomplit deux tâches distinctes :

#. Fournir une sélection de composants (les Composants Symfony2) et
#. Fournir une sélection de composants (les Composants Symfony) et
des bibliothèques tierces (ex `Swiftmailer`_ pour envoyer des emails);

#. Fournir une configuration et une bibliothèque « colle » qui lie toutes ces
pièces ensembles.

Le but du framework est d'intégrer plein d'outils indépendants afin de
fournir une expérience substantielle au développeur. Même le framework lui-même
est un bundle Symfony2 (c-a-d un plugin) qui peut être configuré ou remplacé
est un bundle Symfony (c-a-d un plugin) qui peut être configuré ou remplacé
entièrement.

Symfony2 fournit un puissant ensemble d'outils pour développer rapidement des
Symfony fournit un puissant ensemble d'outils pour développer rapidement des
applications web sans pour autant s'imposer à votre application. Les utilisateurs
normaux peuvent commencer rapidement à développer en utilisant une distribution
Symfony2, ce qui fournit un squelette de projet avec des paramètres par défaut.
Symfony, ce qui fournit un squelette de projet avec des paramètres par défaut.
Pour les utilisateurs avancés, le ciel est la seule limite.

.. _`xkcd`: http://xkcd.com/
Expand Down