Je suis développeur web freelance et propose des formations à Symfony2 ! Contactez-moi pour en discuter.

Doctrine, l’ORM de base de Symfony2

Préfixer une table de base de données est, de manière générale, une mauvaise pratique. Souvent parce que cela signifie qu’on cherche à faire cohabiter 2 applications différentes sur une même base de données, ce qui n’est pas une bonne chose du point de vue architecture et séparation des responsabilités (SoC, Separation of Concerns). Dans ce cas, il est largement accepté d’avoir chaque application sur une base séparée, et c’est d’une manière générale la méthode préconisée.

Maintenant, il arrive des cas où il est utile de pouvoir préfixer ses tables. Par exemple parce que c’est la convention requise, ou bien parce que les 2 applications sont 2 parties d’un même tout (par exemple une application Symfony pour le coeur métier, et un WordPress pour la partie blog). Préfixer les tables permet alors d’éviter les collisions de noms.

Lire la suite »

Vous connaissez sans doute FOSUserBundle, un des bundle les plus connus et utilisés de Symfony2. Il permet de gérer l’enregistrement et l’authentification de vos utilisateurs de manière très simple, ce qui permet de se concentrer sur le code métier des applications.

La documentation du bundle est très complète et bien fournie, mais ne couvre pas un détail : lorsqu’un utilisateur se connecte dans votre application (avec son login/mot de passe par exemple), si l’authentification réussit, alors l’utilisateur est redirigé vers la page d’accueil.

Mais cela n’est pas forcément ce que l’on souhaite ! On peut vouloir qu’il soit redirigé ailleurs, par exemple vers sa page de profil. Et quand c’est comme ça, on fait comment ? C’est ce que je vais vous expliquer.
Lire la suite »

Permettre à l’utilisateur d’uploader des fichiers est une tâche qui revient régulièrement. Cela peut par exemple permettre à l’utilisateur de mettre en ligne sa photo de profil, ou encore si vous proposez une solution d’hébergement de documents, lui permettre de stocker des fichiers pdf importants.

Dans cet article, nous allons prendre l’exemple de la mise en ligne d’une photo de profil pour vos utilisateurs, et regarder comment implémenter cette fonctionnalité avec Symfony2. Le code utilisé est inspiré de la page du cookbook associée à ce sujet, mais je vais essayer de détailler un peu plus la procédure afin de faciliter sa compréhension.

Lire la suite »

La console Symfony2. J’ai écrit un article sur comment écrire ses propres commandes, mais rien sur comment bien se servir de celles qui existent déjà ! Le but de cet article est donc remédier à cela, en faisant un tour d’horizon des commandes disponibles de base, et de ce qu’elles permettent de faire.

Commencez par lancer une terminal, et placez-vous à la racine d’un projet Symfony2.

1
php app/console

S’il y a une chose à retenir de cet article, c’est cette commande. Elle liste toutes les commandes consoles disponibles, ce qui permet de ne pas avoir à retenir la syntaxe de toutes celles dont je vais vous parler par la suite. Si vous retenez cette commande et que vous savez ce qu’il est possible de faire, vous pouvez ensuite retrouver la commande correspondante dans la liste.
Lire la suite »

J’ai récemment reçu un mail me demandant si je savais comment résoudre un problème assez intéressant: afficher un formulaire de contact sur toute les pages dans le footer, mais sans le code associé au formulaire dans tous les contrôleurs.

Dans le cas d’un formulaire où il y a une logique de traitement derrière pour utiliser les données et non pas seulement les afficher, le problème en contient en fait 2 :

  • Comment afficher dans une vue des éléments qui doivent être générés par un contrôleur mais qui sont toujours les mêmes, sans devoir les passer en argument de chaque méthode du contrôleur ?
  • Comment traiter un formulaire comme il se doit alors que le code du contrôleur principal de la page ne contient pas de code de gestion du formulaire en question ?

La solution ? Une bonne partie de la réponse se trouve dans la fonction render de Twig. Cette fonction nous permet d’exécuter le code d’un contrôleur directement depuis la vue. Dans notre cas, nous allons créer une méthode de contrôleur qui se charge de créer un formulaire de contact, et l’appeler depuis la vue.
Lire la suite »

Aujourd’hui, nous allons voir comment créer nos propres commandes console pour Symfony2. Si vous utilisez déjà ce framework, vous en avez probablement déjà utilisé quelques unes. S’il vous est arrivé de lancer une console et d’y taper par exemple

1
php app/console doctrine:schema:update

ou bien

1
php app/console cache:clear

alors vous avez utilisé le système de commandes console de Symfony2. Ces commandes sont très utiles, et permettent de simplifier pas mal de choses. La première commande permet de mettre à jour une entité qui a été modifié du côté de la base de données, et la seconde permet de vider le cache. Mais comment faire pour écrire nos propres commandes si l’on souhaite nous aussi automatiser des tâches pénibles, récurrentes ou difficiles à réaliser à la main ?
Lire la suite »

Cet article est la traduction d’un article original de Fabien Potencier, à l’origine de Symfony2, disponible ici.

Dans le précédent article de cette série, nous avions vidé la classe Simplex\Framework en étendant la classe HttpKernel du composant éponyme. En voyant cette classe vide, vous pouvez être tenté de déplacer du code qui se trouve dans le contrôleur de façade dedans :
Lire la suite »

Cet article est la traduction d’un article original de Fabien Potencier, à l’origine de Symfony2, disponible ici.Créez votre propre framework… avec les composants Symfony2 (partie 10)

Dans la conclusion de la seconde partie de cette série, j’ai parlé d’un des grands avantages de l’utilisation des composants Symfony2 : l’interopérabilité entre les tous framework et les applications qui les utilisent. Faisons un grand pas en avant dans cette direction en faisant implémenter à notre framework HttpKernelInterface :

1
2
3
4
5
6
7
8
9
namespace Symfony\Component\HttpKernel;

interface HttpKernelInterface
{
    /**
     * @return Response une instance de Response
     */

    function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true);
}

Lire la suite »

Par défaut, les champs de formulaires de type « Date » de Symfony2 sont représentés par 3 listes déroulantes. C’est très pratique pour du prototypage, mais ce n’est pas forcément ce que l’on veut proposer à l’utilisateur. On peut avoir envie de plutôt utiliser un sélecteur de date de type calendrier, comme on peut le trouver sur n’importe quel site de réservation d’hôtel ou de billet d’avion par exemple.

Nous allons donc voir comment implémenter cette fonctionnalité dans Symfony2 avec jQuery UI. jQuery est une librairie JavaScript qu’on ne présente plus, jQuery UI en est une extension qui propose de nombreuses fonctionnalités pour créer des interfaces dynamiques très web 2.0.

Lire la suite »

Cet article est la traduction d’un article original de Fabien Potencier, à l’origine de Symfony2, disponible ici.

Actuellement, il manque à notre framework une caractéristique essentielle à tout bon framework : l’extensibilité. Être extensible signifie que le développeur doit pouvoir facilement s’intégrer dans le cycle de vie du framework pour modifier la manière dont les requêtes sont gérées.

De quel genre d’intégration parlons nous ? D’authentification ou de système de cache par exemple. Pour être flexible, il faut que le développeur puise s’intégrer de manière plug-and-play. Beaucoup d’applications appliquent des concepts similaires, tel que WordPress ou Drupal. Dans certains langages, il y a même des standards tel que WSGI en Python ou Rack en Ruby.
Lire la suite »