Le plugin sfEasyGMapPlugin permet d'ajouter simplement les fonctionnalités de Google Maps a votre projet Symfony. La documentation donnée sur la page du plugin est loin d'être complète et à jour, et installer ce plugin sur un projet Symfony 1.4 n'est pas trivial, d'où ce billet.

Pour commencer il faut obtenir une clé pour l'API Google Maps. Il vous faudra autant de clés que de domaines et cela vaut pour les domaines locaux. Étant donné que je travaille sur plusieurs machines a des lieux différents, il m'a fallu créer 2 clés uniquement pour les machines de développement, il m'en faudra une troisième pour le site réel.
Les clés sont a placer dans le fichier app.yml de votre application:

all:
  google_maps_api:
    keys:
      domaine1: clé gmaps
      domaine2: autre clé gmaps

Il faudra aussi ajouter au fichier settings.yml une référence au plugin dans les modules utilisés :

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

Ceci fait parti des choses qui ne sont indiquées nulle part dans la documentation, il m'a fallu chercher dans les listes de discussions pour trouver cela... Un fois la clé mise en place on récupère le plugin.

cd plugins
svn co svn co http://svn.symfony-project.com/plugins/sfEasyGMapPlugin/branches/v3 sfEasyGMapPlugin
cd ..
ln -s ../plugins/sfEasyGMapPlugin/web web/sfEasyGMapPlugin

Tout ce qui concerne les taches qui automatisent l'installation des plugins comme symfony plugin:install ou symfony plugin:publish-assets ne fonctionne pas, pas la peine de perdre du temps la dessus, le plugin a besoin d'être mis a jour. Cela ne l'empêche pas de fonctionner a merveille, il est juste plus compliqué a mettre en place que d'autres plugins. Dernière chose a mettre en place, dans le fichier config/ProjectConfiguration.class.php ajouter a la liste de vos plugins utilisés :

    $this->enablePlugins('sfEasyGMapPlugin');

On n'oubliera pas le clear cache de rigueur pour ce types d'opérations:

.symfony cc

Le plugin est maintenant utilisable, nous allons le tester sur une des actions du projet.
Dans l'action:

    public function executeIndex(sfWebRequest $request)
    {
        $this->gMap = new GMap();
        $this->gMap->addMarker(new GMapMarker(51.245475,6.821373));
        $this->gMap->addMarker(new GMapMarker(46.262248,6.115969));
        $this->gMap->centerAndZoomOnMarkers();
    }

Dans le template:

<?php use_helper('GMap') ?>
<?php include_map($gMap,array('width'=>'512px','height'=>'400px')); ?>
<?php include_map_javascript($gMap); ?>

Ceux qui suivent la documentation officielle en parallèle remarqueront certaines différences. J'ai ajouté un appel a la fonction centerAndZoomOnMarkers() dans l'action, sinon on se retrouve avec un carré gris et j'ai supprimé l'helper 'Javascript' dans use_helper() qui est déprécié dans Symfony 1.4.

Nous voyons ici les fonctionnalités de base du plugin, mais celui est en réalité beaucoup plus riche. Essayez le Sample 2 de la documentation et vous verrez qu'il est très simple de faire une recherche GoogleMaps et de convertir le nom d'une ville en coordonnées.
En plus du plugin et grace a Doctrine, stocker des coordonnées deviens un jeu d'enfant grâce au comportement Geographical. Voila pour le plugin sfEasyGMapPlugin, j'espère que ce billet deviendra rapidement inutile et que le code source et la documentation seront mises a jour pour prendre en compte Symfony 1.4 et compléter les informations manquantes.