Liens vers Tutoriels Symfony2

J’ai rajouté une catégorie où j’indiquerai des liens vers des tutoriels pour Symfony2! C’est toujours pratique de les partager !

En bas à droite du menu sur le site ;)

Un PreExecute pour votre Controller via des Listeners

Voici une petite aide pour créer un PreExecute de votre Controller. Qu’est-ce que ça veut dire ? Avant d’exécuter votre Controller, vous voudriez faire quelque chose ! C’est possible, grâce aux Events!

Maj: Source sur Github

Un event, évènement, repose sur le pattern Observateur. Exemple:

  • Quelqu’un fait quelque chose, tous ceux qui l’observent sont immédiatement prévenus !
  • Un objet Timer émet toutes les 5 secondes un top. Des objets observateurs s’enregistrent au près du Timer pour être prévenus dès qu’il y a un top !

Observateur – définit une relation entre objets de type un-à-plusieurs, de façon que, lorsque un objet change d’état, tous ceux qui en dépendent en soient notifiés et soient mis à jour automatiquement.

Symfony2 implémente ce pattern.

Entrons dans le vif du sujet, imaginons que nous ayons un site e-commerce à concevoir, et que nous permettions au client de pouvoir remplir son panier soit en étant enregistré dans la base de données, soit avec une session.

Soit on colle des IF partout dans son Controller et on fait en sorte que ça fonctionne, soit on utilise le pattern Stratégie.

Le pattern Stratégie définit une famille d’algorithmes, encapsule chacun d’eux et les rend interchangeables.
Stratégie permet à l’algorithme de varier indépendamment des clients qui l’utilisent.

Un schéma vaut mieux qu’un long discours:
Lire la suite

Encore de la pagination, paginator de chez knplabs (et Zend!)

Dans l’article précédent je vous présentais pagerFantaBundle, un système de pagination simple d’utilisation et performant. Aujourd’hui on va utiliser et comparer le Bundle paginatorBundle.

La principale différence, si on peut dire, est l’utilisation de la librairie Paginator de chez ZendFramework.

La seconde différence c’est que si on utilise ORM les requêtes seront optimisées, ce qui n’est pas encore le cas avec pagerFanta, mais c’est prévu selon l’auteur.

Lire la suite

Pagination avec Symfony2 et PagerFanta !

Symfony2 Beta1 est sorti depuis quelques semaines, tout va bien !

Alors que je me demandais comment fonctionnait un Bundle je constate qu’il utilise un Pager! Oh, de la pagination! Voilà un sujet intéressant !

Alors le but n’est pas de vous expliquer en profondeur comment va fonctionner le pager, la classe est tellement simple que je vous laisse la découvrir !
Lire la suite

A venir

Symfony2 continu sa course, on en est à la PR8 et tout va bien pour le moment !

Le temps j’essaie d’approfondir mes connaissances sur le sujet, la doc commence à être accessible et compréhensible, et les exemples fournies aident aussi.

J’ai discuté un peu avec mes canards, d’après eux ils aimeraient bien avoir accès à une application où ils pourraient discuter et partager des informations avec leurs amis canards ! Alors bon, je leur ai montré ce qu’on utilisait principalement chez nous, style Facebook et ils ont dit OK! Un réseau social pour canards !

Une nouvelle série d’articles devrait voir le jour !

Pendant ce temps, n’attendez pas pour tester SF2 et les nombreux Bundles !

Quelques nouvelles de Symfony2

La conférence à San Francisco s’est achevée et les seules, si on peut dire, informations que j’ai simplement trouvées se trouvent sur le blog de Symfony.

Les diaporamas sont intéressants, je vous invite à les consulter (en anglais) :

Le premier est un petit historique de Symfony.

Un autre sur les Tests Unitaires.

Le CMS Apostrophe.

Doctrine2 dans le monde réel.

PHPBB4 utilisera Symfony2.

Une présentation de Symfony2.

Puis une de Twig.

Les situations où on ne souhaite pas utiliser PHP.

Symfony 1 et 2.

Assetic.

Doctrator, Doctrine2 et MongoDB.

Et c’est tout mais ça fait déjà pas mal de choses à lire !

Bon allez, je retourne sur SF2 et mes canards…!

 

Nos canards découvrent Symfony2 – ! PR3 ! article plus à jour !

Oh, cela faisait un petit moment que je ne vous avais rien écris ! Il faut dire que j’ai été occupé ces derniers temps, fin de vacances, reprises des cours etc…Et puis F.Potencier nous sort la version PR3 de Symfony2 alors, autant vous dire que j’ai aussi passé quelques temps à apprendre la bête !

Je vous le dis tout de suite, le manque de documentation, à jour !, m’a fait perdre du temps pour faire fonctionner facilement les fonctions de bases. Particulièrement avec Doctrine2.

Mise à jour après la conclusion !

Lire la suite

Prendre un Café nous sert un petit code bien utile pour manipuler l’objet user

Trouvé grâce au canal IRC Symfony-fr, je vous fais partager un lien fort bien utile pour rendre global l’utilisation de l’objet user dans vos formulaires.

Le principe se base sur le fait qu’il y a une classe dans votre dossier form, BaseForm, que tous vos formulaires vont étendre. Dans cette classe, on va y stocker notre instance de user.

Comment ça marche ? En fait le principe se base sur les Events. Les événements. Symfony diffuse des événements que l’on peut écouter, principe du Design Pattern Observer. Il y a un événement appelé context.load_factories, qui est diffusé par un EventDispatcher, lorsque toutes les factories auront été chargées, et cela concerne également l’objet user en cours.

Pour l’écouter il faut d’abord s’enregistrer au-près de lui, cela se passe dans la classe ProjectConfiguration. Et dès qu’un événement sera diffusé, alors il sera capté par ses observateurs, et on appellera la méthode à exécuter par ce, ou plusieurs, observateur.

<?php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    // ...
    // On se connecte au sujet, et on indique quelle méthode appeler en cas de diffusion
    // Ici la classe est désignée par $this.
    $this->dispatcher->connect('context.load_factories', array($this, 'listenToLoadFactoriesEvent'));
  }
 
  public function listenToLoadFactoriesEvent(sfEvent $event)
  {
    BaseForm::setUser($event->getSubject()->getUser());
  }
}

Ensuite la méthode appelée se charge d’attribuer l’instance de user à la classe BaseForm grâce à la méthode statique setUser.

Ensuite il ne reste plus qu’à utiliser votre objet user dans vos formulaires en y accédant comme vous le souhaitez, puisque maintenant c’est une variable protégée de la classe parente !

Astucieux non ?

Le lien : Prendre un Café

Etape 7.2: Mise en place de sfForkedDoctrineApplyPlugin

Comme je le disais dans l’étape 7.0, sfForkedDoctrineApplyPlugin (FDA), va nous permettre de gérer l’inscription et la confirmation d’utilisateur par e-mail. Le tout se basant sur DoctrineGuard (DG).

Installation

Téléchargez et installez le plugin.

Ensuite lancez une migration:

./symfony doctrine:generate-migrations-diff

Une migration vous permet d’enregistrer dans un fichier les modifications que vous avez effectuées dans votre schéma, et d’y revenir facilement si vous le souhaitez, au lieu de tout recharger:

./symfony doctrine:migrate
./symfony doctrine:build --all-classes

Et maintenant on active le module sfApply dans l’application, ici Frontend:

all:
  .settings:
    #...#
    enabled_modules: [default, ... , sfGuardAuth, sfApply]

FDA indique aussi dans le fichier Readme, comme faire pour ajouter des champs en plus, par exemple l’âge ou un numéro de téléphone. Plusieurs moyens sont proposés, comme l’héritage, ou redéfinir le schéma du plugin.

Je vous laisse consulter ces points car cela ne nous servira pas ici. Mais ça peut être intéressant de le savoir si par exemple pour l’inscription sur un site vous avez besoin de beaucoup d’informations.

Lire la suite

Etape 7.1: Implémentation de DoctrineGuard

Installation

Rendez-vous sur la page du plugin, et téléchargez le par vos propres moyens !

Ensuite, on charge le tout avec Doctrine:

symfony doctrine:build --all --and-load --no-confirmation

On active les modules dans le backend, dans le dossier config/setting.yml

all:
    .settings:
      enabled_modules:      [default, sfGuardGroup, sfGuardUser, sfGuardPermission]

Idem dans le frontend, ça sera fait comme ça:

all:
    .settings:
      enabled_modules:      [default, sfGuardAuth]

- “On dirait le même code que dans le fichier readme ?”

- “A peu de choses près oui”

- “Y a quoi qui change ?”

-” Rien en fait”

Sauf que je vous le fais en français !

Lire la suite

Suivre

Get every new post delivered to your Inbox.