Création d’un plugin Symfony implémentant la RFC2445 (iCalendar) #3

23 février 2010

Troisième partie de cette série,

la création du plugin et l’organisation de ses fichiers

pour créer le plugins, se placer dans le dossier dossier racine Symfony et saisir la commande :

$symfony generate:plugin sfIcalCreatorPlugin

Et valider. Le squelette du plugin est alors créé dans plugins/sfIcalCreatorPlugin.

Contenu du répertoire du plugin :

config  lib  LICENSE  package.xml.tmpl  README  test

Comme dans l’organisation générale de Symfony, config/ contiendra les fichiers de configuration du plugin, dont le fichier décrivant le modèle de l’application.

lib/ contiendra les classes et test/ les scripts de test unitaire.

Une fois le squelette du plugin créé, il faut configurer l’application courante pour l’utiliser. Se placer dans le dossier racine Symfony et éditer le fichier config/ProjectConfiguration.class.php.

le mien ressemble a ça :

<?php

require_once '/usr/lib/symfony-1.4.1/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins('sfDoctrinePlugin');
  }
}

Ajoutons une référence au nouveau plugin :

<?php
require_once '/usr/lib/symfony-1.4.1/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins('sfDoctrinePlugin');
    $this->enablePlugins('sfIcalCreatorPlugin');
  }
}

Et voila! Désormais, les fichiers de schémas disponibles dans le plugin seront accessibles au projet,
ce qui permettra de crée les classes concrètes du plugin pour l’utiliser dans le projet Symfony.

L’avantage du plugin, c’est de pouvoir créer un composant échangeable standard, intégrable dans des applications diverses. Mais si chaque projet modifie le plugin pour ses propres besoins, comment s’y retrouver?
Les développeurs de Symfony ont mis en place le mécanisme suivant pour les classes métiers distribuées avec des plugins :

- le plugin contient des classes dont les noms sont formés comme suit : Plugin[nom modèle]. ex: PluginPerson.
Ces classes sont déclarées abstraites, et ne peuvent être utilisées directement par le projet. Elles contiennent le code métier spécifique livré avec le plugin.
Ces classes héritent d’une autre famille de classe, dont le nom est formé comme suit : Base[nom modele]. ex. BasePerson.
Ces classes ne sont pas livrées avec le plugin, mais seront générées automatiquement par Doctrine. Une troisième famille de classe sera également générée par Doctrine, dans le dossier lib/ du projet courant. Ces classes porteront les noms de modèles, hériteront des classes Plugins[nom modèle] , et pourront (enfin!) être étendues et utilisées par le projet courant.

Dans le prochain billet, je présenterais la configuration de la base de données Sqlite3 et la génération d’un premier modèle via Doctrine.

Création d’un plugin Symfony implémentant la RFC2445 (iCalendar) #2

10 février 2010

Nouvel épisode!

Ce billet ne parlera que de la première partie du projet, concernant l’installation de Symfony. Cette tâche étant déjà largement documentée, je me contenterais de préciser mon propre environnement :

Ubuntu avec apache2, PHP, sqlite3 et l’extension PHP qui va avec, le tout à jour, et Symfony 1.4 avec Doctrine 1.2.

Je ferais référence au “dossier racine Symfony” dans ces billets en faisant référence au répertoire dans lequel un projet Symfony aura été créé pour accueillir ce nouveau plugin.

Création d’un plugin Symfony implémentant la RFC2445 (iCalendar)

10 février 2010

Profitant d’une période d’inter-contrat, j’ai décidé de décrire la création d’un plugin Symfony utilisant l’ORM Doctrine, et implémentant la RFC2445, celle qui décrit l’utilisation des calendriers électroniques via la norme iCalendar.
Ce plugin embarquera probablement le composant iCalcreator, qui implémente déjà la partie métier. Reste a ajouter la persistance aux calendriers, et quelques petits plus.
Il faudra donc :
- installer Symfony
- créer le plugin
- implémenter le schéma Doctrine
- ajouter quelques méthodes sur les objets pour faciliter leur manipulation et créer les tests unitaires
- intégrer la logique via iCalcreator
- ajouter des tests unitaires
- créer des interfaces client, en utilisant diverses technologies (Json, calendrier html, javascript..)

Affaire à suivre!