03
NOV

Organisation et visibilité dans vos projets symfony

Publié le 03/11/10 à 10h02 par Cethy

Si comme moi vous aimez organiser vos projets symfony avec des plugins, vous aurez surement remarqué que ca peut rapidement devenir le bazar.

Symfony organisation des plugins perso

Voici une technique pour pouvoir séparer vos packages (plugins persos) et les plugins externes pour une meilleure visibilité.


Petit rappel -à quoi sert de développer DES Plugins ?

Les plugins nous permettent de grouper les modèles, forms, filters mais aussi les bibliothèques (lib) pour nous aider à organiser nos projets.

Sur le papier, c'est très intéressant, mais symfony ne nous propose aucun moyen de séparer "nos" plugins (que nous appellerons packages) et les plugins "externes".

Très bien, faisons le nous-même :

 

Création d'un nouveau dossier "packages"

La première chose à faire, c'est évidemment de créer le nouveau dossier dans la racine du projet.

L'arborescence racine devrait ressembler à ca :

Arborescence projet symfony

 

Modifier le comportement de la classe ProjectConfiguration

Pour que notre projet sache où aller chercher nos packages, on va "cloner" la méthode qui active les plugins et la modifier selon nos besoin.

class ProjectConfiguration extends sfProjectConfiguration {
 
  public function enablePackages($packages) 
  {
    if (!is_array($packages)) 
    {
      if (func_num_args() > 1) 
      {
        $packages = func_get_args();
      }
      else 
      {
        $packages = array($packages);
      }
    }
    foreach ($packages as $package) 
    {
      $this->setPluginPath($package, sfConfig::get('sf_root_dir') . '/packages/' . $package);
    }
    $this->enablePlugins($packages);
  }

 

Utiliser le nouveau comportement

class ProjectConfiguration extends sfProjectConfiguration {
 
  public function setup() 
  {
    $this->enablePlugins(
      'sfDoctrinePlugin',
      'sfFormExtraPlugin',
      ...
    );
    $this->enablePackages(
      'mySuperPackage',
      'anOtherPackage',
      ...
    );
  }
  ...
 
}

 

Note de fin

Avec ce nouveau comportement, de nouvelles conventions de codes sont logiquement de la partie : comme on change le suffixe, il faut aussi changer le nom de la classe de configuration du plugin : /packages/mySuperPackage/config/mySuperPackageConfiguration.class.php.

 

Site Officiel

Baraguiné par fawad le 06/11/10 à 15h16
fawad sur La Ferme du Web
Bonjour, tout d'abord félicitation pour ce blog, je le li attentivement tout les jours. Des articles parfait. Je ne sais pas comment vous faites, mais en général je cherche quelque chose et le jour meme ou le lendemain, vous me trouvez une solution (Vous avez des micros dans mon bureau ? C'est çà ? :)
Bref continuez ainsi, ca fait plaisir d'avoir que des articles de qualités, et non pas comme certains, le plus d'articles possible.

Revenons à notre sujet, Symfony. Est-ce que quelqu'un connait un endroit ou on peut trouver toutes les bonnes pratiques avec les interets de chacun (comme celles des plugins par exemple, mais pleins d'autres également).
Ca va faire un an et demi que je code sous symfony, j'en suis super satisfait, mais etant autodidacte et n'ayant pas commencer par PHP (direct Symfony) j'ai forcément des manques au niveau organisation.

Merci a vous.
Baraguiné par Cethy le 08/11/10 à 21h50
Cethy sur La Ferme du Web
Niveau organisation, Symfony est fait tel que tu ne peux virtuellement pas faire n'importe quoi : les models vont avec les models, les fichiers de configurations se rangent en fonction de leur "impact" (main application, appli particulière, module).
Mon tutorial est utile si tu as réellement besoin d'y voir encore plus clair dans tes projets. Si comme moi tu as un projet de test où se côtoient une bonne 20aine de plugins de tous bord, tu sentiras ton projet respirer ^^

Sinon les seuls conseils que je pourrais donner en plus sont de bien penser au découplage de ses classes et refactoriser, refactoriser, refactoriser :)

Ajouter un Commentaire

Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:

Compte la Ferme du Web

Identifiez-vous
Inscrivez-vous

Compte Facebook

Compte Twitter

Connexion avec votre compte twitter
Rechercher sur la Ferme du web