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.
Réponse de Ulrich le 15 oct. 2012