Plugin pour utiliser une libriaire PHP5.3 avec des namespaces dans Symfony 1.4

Symfony 1.4 ne prends pas en charge les namespaces de PHP 5.3 et cela complique un peu l'utilisation des librairies PHP récentes qui utilisent les namespace comme Imagine,  Assetic ou Twig. Cet article présente comment j'ai intégré Imagine et Assetics dans mes projets sf1.

La solution la plus simple que j'ai trouvée est d'utiliser la classe UniversalClassLoader de Symfony 2. Pour inclure facilement cette classe dans un projet Symfony 1, il faut commenter la déclaration du namespace.

La structure du plugin est assez simple:

 
- plugins
    |_ muImaginePlugin
        |_ config
            |_ muImaginePluginConfiguration.class.php
        |_ lib
            |_ UniversalClassLoader.php
        |_ src
            |_ Imagine
                |_ ...

Les classes de la librairie ne sont pas dans le dossier lib car je ne veux pas que l'autoload de Symfony 1 tente de les charger. J'utilise la class UniversalClassLaoder de sf2 dans la class de configuration du plugin pour charger les classes de ma lib.

 
<?php
 
class muImaginePluginConfiguration extends sfPluginConfiguration
{
	public function initialize()
	{
		$loader = new UniversalClassLoader();
		$loader->registerNamespace('Imagine', __DIR__.'/../src/Imagine/lib/');
		$loader->register();
	}
}

Bien sûr il ne faut pas oublier d'ajouter le plugin dans le fichier /config/ProjectConfiguration.class.php.

Pour utiliser une classe de la lib, rien de plus simple, il faut utiliser la déclaration incluant le namespace.

 
$oImagine = new Imagine\Gd\Imagine();		

J'espère que ce petit article vous sera utile pour faire évoluer vos projets symfony 1.

Il y a 4 commentaires

  • etoileweb10-06-2012 13:50:26


    Excusez, ou peut-on télécharger le plugin en question ?


  • Ulrich10-06-2012 17:58:09


    Bonjour,



    On ne propose pas de plugin en téléchargement car cela dépends de la librairie que l'on souhaite utiliser, cet article se veut générique. Il y a toute les infos pour créer le plugin, vous ne devriez pas rencontrer de problème.


  • etoileweb10-15-2012 09:48:46

    J'ai réalisé le plugin en suivant le tuto point par point, mais l'appel $oImagine = new Imagine\Gd\Imagine(); retourne cette erreur:
    Fatal error: Class 'Imagine\Gd\Imagine' not found in C:\xxxxx\lib\vendor\symfony\apps\frontend\modules\accueil\actions\actions.class.php on line 42.

  • Ulrich10-15-2012 10:38:20


    Vous avez ajouté le plugin dans la liste des plugins enabled dans le fichier /config/ProjectConfiguration.class.php ?