Programmation PHP/Symfony

Un livre de Wikilivres.
Aller à : navigation, rechercher


Présentation[modifier | modifier le wikicode]

Symfony2.svg

Symfony est un cadriciel MVC libre écrit en PHP (> 5). En tant que framework, il facilite et accélère le développement de sites et d'applications Internet et Intranet.

Fonctionnalités[modifier | modifier le wikicode]

Symfony propose entre autres :

  • Une séparation du code en trois couches, selon le modèle MVC, pour une plus grande maintenabilité et évolutivité.
  • Un templating simple, basé sur PHP et des jeux de "helpers", ou fonctions additionnelles pour les gabarits... Comme alternative au PHP, on peut aussi utiliser le moteur de templates Twig dont la syntaxe est plus simples.
  • Des performances optimisées et un système de cache pour garantir des temps de réponse optimums.
  • Le support de l'Ajax.
  • Une gestion des URL parlantes (liens permanents), qui permet de formater l'URL d'une page indépendamment de sa position dans l'arborescence fonctionnelle.
  • Un système de configuration en cascade qui utilise de façon extensive le langage YAML.
  • Un générateur de back-office et un "démarreur de module" (scaffolding).
  • Un support de l'I18N - Symfony est nativement multi-langue.
  • Une couche de mapping objet-relationnel (ORM) et une couche d'abstraction de données (cf. Doctrine et son langage DQL[1]).
  • Une architecture extensible, permettant la création et l'utilisation de plugins.
  • Assetic : gestionnaire de fichiers .css et .js.
  • Swift Mailer : messagerie électronique.

Critique[modifier | modifier le wikicode]

Il peut être redondant de mettre à jour des fichiers .yml en plus des .php (qui peuvent se contredire) à chaque changement de structure. De plus, ce processus est peu intuitif au départ, c'est pourquoi la présente page se veut une prise en main la plus rapide possible du framework.


Créer un projet[modifier | modifier le wikicode]

Page d'accueil par défaut.

Symfony 4[modifier | modifier le wikicode]

Avec Composer :

Symfony 3[modifier | modifier le wikicode]

Il existe plusieurs techniques au choix :

Composer.phar[modifier | modifier le wikicode]

Avec Composer : php composer.phar create-project symfony/framework-standard-edition MonProjet1.

Symfony.phar[modifier | modifier le wikicode]

Créer l'installeur par ces commandes ou bien en téléchargeant le fichier à l'adresse qui y figure :

GitHub[modifier | modifier le wikicode]

Avec GitHub : https://github.com/symfony/symfony.

Lancer le projet[modifier | modifier le wikicode]

Une fois créé, il suffit de suivre les consignes affichées :

   5.15 MB/5.15 MB ============================================================  100%

Preparing project...

OK  Symfony 3.1.4 was successfully installed. Now you can:

   * Change your current directory to C:\Program Files (x86)\EasyPHP\eds-www\MonProject1

   * Configure your application in app/config/parameters.yml file.

   * Run your application:
       1. Execute the php bin/console server:run command.
       2. Browse to the http://localhost:8000 URL.

L'URL permet d'y accéder tant que la console shell est active.

Pour lancer le projet rapidement et facilement sous Windows, on peut créer un fichier MonProjet1.cmd :

cd "C:\Program Files (x86)\EasyPHP\eds-www\MonProject1"
start http://localhost:8000/
php bin\console server:run
pause

La page de bienvenue doit s'ouvrir ensuite dans le navigateur Web par défaut.

Pour rendre le site web accessible à d'autres machines, le lancer avec son IP, par exemple :

php bin/console server:start 192.168.1.8:80

Cela nécessite d'arrêter le serveur Web qui prenait le port 80.


Configurer le projet[modifier | modifier le wikicode]

La liste des commandes disponibles en console est visible avec :

php bin\console
link={{{link}}}Attention !

Dans Symfony 2 c'était php app\console.

On peut donc par exemple flusher le cache avec :

php bin\console cache:clear

Par ailleurs, les fichiers .yml de configuration globale sont dans app\config\. Par exemple le mot de passe et l'adresse de la base de données sont modifiables en éditant parameters.yml.

Hiérarchie des composants[modifier | modifier le wikicode]

  • Projet : arborescence incluant le framework et le code source de sa propre application.
    • app : applications.
      • config : fichiers .yml de paramétrage global.
      • Resources\views : templates .twig.
    • bin : binaires.
    • src : code source ("bundles" de l'utilisateur).
    • vendor : bibliothèques des dépendances ("bundles" téléchargés). Fin 2016, on en compte près de 3 000[2].
    • Web : site accessible en HTTP. Il contient les "assets" : les fichiers CSS et JavaScript.

Créer une page[modifier | modifier le wikicode]

Par exemple pour créer une nouvelle page sur l'URL :

http://localhost:8000/test

Par défaut, la page renvoie l'exception No route found for "GET /test". Pour la créer, il faut juste générer un fichier src\AppBundle\Controller\TestController.php avec :

<?php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class TestController extends Controller
{
    /**
     * @Route("/test", name="test")
     */
    public function HelloWorldAction($numero = 0)
    {
        return new Response('Hello World!');
    }
}
?>

Le nom de l'URL pointant vers cette classe est ici spécifié par l'annotation "@Route".

link={{{link}}}Attention !

Le nom du fichier doit forcément se terminer par Controller.php, et le nom de la méthode par "Action".

Par ailleurs, les classes natives de PHP doivent être introduites par leur namespace ou bien par l'espace de nom global. Ex :

use DateTime;
echo new DateTime();

ou

echo new \DateTime();

Routage[modifier | modifier le wikicode]

Pour créer des alias, c'est-à-dire plusieurs autres URL pointant vers la page ci-dessus, on peut l'ajouter dans les annotations du fichier .php, ou bien dans app\config\routing.yml :

test:
    path:      /test/{numero}
    defaults:  { _controller: AppBundle:Test:HelloWorld }

A présent http://localhost:8000/test/1 ou http://localhost:8000/test/2 affichent "Hello World!".

link={{{link}}}Attention !

Une fois routing.yml sauvegardé, l'URL fournie en annotation (/test) ne fonctionne plus.

Erreurs connues[modifier | modifier le wikicode]

Profiler sous Symfony 2.8.

En cas d'erreur, un outil de débogage appelé "Profiler", est accessible en bas à gauche de la page d'erreur, avec des logs et mesures de performances.

SSL certificate problem: unable to get local issuer certificate[modifier | modifier le wikicode]

Utiliser l'installation avec "Composer.phar" plutôt que "Symfony.phar".

Références[modifier | modifier le wikicode]

Voir aussi[modifier | modifier le wikicode]