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

etoileweb 6-10-12

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

Ulrich 6-10-12

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.

etoileweb 15-10-12
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.
Ulrich 15-10-12

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

Ajouter un commentaire

Si vous souhaitez une réponse par mail.

Recherche

Détails de l'article