Pour une question de rapidité j'ai mis en place pour le moment la première solution. J'ai ajouté la ligne de code suivante dans le fichier /config/ ProjectConfiguration.class.php :
require dirname(__FILE__).'/../lib/sfRichTextEditorFCK.class.php'; Par contre j'ai placé cette ligne de code après : sfCoreAutoload::register(); et sa fonctionne par contre si j'écris la ligne en premier comme tu le recommande il y a une erreur. Merci encore pour ton aide ++ On 21 juil, 10:19, naholyr <[email protected]> wrote: > N'oublie pas de nous donner les résultats de tes tests ;) > > On 20 juil, 10:35, eddie <[email protected]> wrote: > > > Merci pour ta réponse précise et très détaillé. > > Je vais regarder les 2 solutions et voir celle qui est la mieux > > adapté. > > > Merci encore de ton aide ++ > > > On 18 juil, 19:21, naholyr <[email protected]> wrote: > > > > Juste pour info, ce n'est pas à proprement parler d'un helper que tu > > > parles (il n'est pas chargé via "use_helper" mais pas l'autoloader, et > > > il ne s'agit pas d'un set de fonctions mais d'une classe). > > > > Il se trouve que Symfony a deux niveaux d'autoload : > > > - le "core_autoloader" qui charge les éléments du noyau et qui est > > > prioritaire. > > > - le reste, celui qu'on connait et qui va chercher dans nos dossiers > > > lib. > > > > Le problème est que les classes chargées par l'autoloader "core" ne > > > peuvent être surchargées par la méthode de copie dans "lib/" (la liste > > > des classes core sont dans une propriété de sfCoreAutoload, en dur). > > > Pour savoir si la classe qui t'intéresse en fait partie, il faut aller > > > voir la propriété "sfCoreAutoload->$classes" (fichier "/path/to/ > > > symfon1.2/lib/autoload/sfCoreAutoload.class.php", ligne 151). > > > > En l'occurrence, pas de bol, sfRichTextEditorFCK est bien présent dans > > > cette liste, ligne 266. > > > > Je vois deux solutions pour que ta modification marche : > > > - Ajouter "require dirname(__FILE__).'/../lib/ > > > sfRichTextEditorFCK.class.php;" à la première ligne de ton fichier > > > "config/ProjectConfiguration.class.php". Ainsi la classe sera chargée > > > via TON fichier avant même que l'autoloader ne soit lancé, et ainsi il > > > ne *devrait* (je n'ai pas tester) pas aller la chercher lui-même. > > > C'est a priori la méthode la plus simple et la plus rapide si elle > > > fonctionne. > > > - Une autre solution peut-être plus propre (quoique ça mérite > > > reflexion) serait de surcharger l'autoloader et d'utiliser le tien au > > > lieu de celui par défaut. Cela nécessite un peu plus de travail par > > > contre... > > > > Du coup je pense que la solution 1, si elle marche, et est accompagnée > > > d'un petit commentaire qui explique pourquoi il y a un require à cet > > > endroit, est largement suffisante ;) > > > Note : Utilise bien un require comme ça si un jour tu déplaces ou > > > vires ton fichier tu auras une fatal error qui te mènera à cette > > > ligne, précédée d'un commentaire qui explique le pourquoi du comment. > > > C'est mieux qu'une erreur muette dont tu chercherais en vain > > > l'origine... > > > > ---------- > > > > Si toutefois tu préfères la solution 2, tu peux l'implémenter en > > > créant ton autoloader "config/myCoreAutoload.class.php" (je le mets > > > dans "config/" pour ne pas confondre avec une classe "standard"). > > > Le gros problème sera que comme c'est basé sur des méthodes statiques, > > > tu vas devoir faire des vilains copier-coller parce que l'héritage de > > > méthodes statiques, PHP ne connait pas... > > > > <?php > > > require "/path/to/symfony/lib/autoload/sfCoreAutoload.class.php"; > > > class myCoreAutoload extends sfCoreAutoload > > > { > > > > // Surcharge du constructeur, on se contente de remplacer quelques- > > > unes des règles d'autoloading > > > > protected function __construct() > > > { > > > parent::__construct(); > > > > // On supprime notre classe de la liste, on souhaite qu'elle soit > > > chargée par les autoloaders classiques basés sur "lib/" > > > unset($this->classes['sfRichTextEditorFCK']; > > > } > > > > // Les copier-coller tout moisis, merci PHP > > > > static public function getInstance() > > > { > > > if (!isset(self::$instance)) > > > { > > > self::$instance = new myCoreAutoload(); > > > } > > > > return self::$instance; > > > } > > > > static public function register() > > > { > > > if (self::$registered) > > > { > > > return; > > > } > > > > ini_set('unserialize_callback_func', 'spl_autoload_call'); > > > if (false === spl_autoload_register(array(self::getInstance(), > > > 'autoload'))) > > > { > > > throw new sfException(sprintf('Unable to register %s::autoload > > > as an autoloading method.', get_class(self::getInstance()))); > > > } > > > > self::$registered = true; > > > } > > > > static public function unregister() > > > { > > > spl_autoload_unregister(array(self::getInstance(), 'autoload')); > > > self::$registered = false; > > > } > > > > } > > > > ?> > > > > Puis tu changes les deux premières lignes de ton fichier "config/ > > > ProjectConfiguration.class.php" pour référer à myCoreAutoload au lieu > > > de sfCoreAutoload, et ça devrait être bon. > > > > Mais bon tu vois la lourdeur de la solution 2 par rapport à la > > > solution 1 ;) > > > > On 17 juil, 11:17, eddie <[email protected]> wrote: > > > > > Bonjour, > > > > > J'utilise symfony 1.2 et doctrine dans un de mes formulaires j'utilise > > > > FCKeditor de la manière suivante : > > > > $this->widgetSchema['presentation'] = new sfWidgetFormTextareaFCK(array > > > > (), array('height'=>'500','width'=>'600')); > > > > > Je souhaite ajouter au FCKeditor le CKFinder pour cela j'ai copié le > > > > fichier "sfRichTextEditorFCK.class.php" se trouvant dans le répertoire > > > > symfony que j'ai placé dans "monprojet/lib/ > > > > sfRichTextEditorFCK.class.php" j'ai effectué les modifications > > > > nécessaire pour activer CKFinder mais visiblement c'est toujours le > > > > helper de symfony qui est chargé. > > > > > Comment dois-je procéder pour pouvoir surcharger le helper ? > > > > > Merci d'avance de vos réponses > > > > ++ --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "Symfony-fr" de Google Groupes. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour afficher d'autres options, visitez ce groupe à l'adresse http://groups.google.com/group/symfony-fr?hl=fr -~----------~----~----~----~------~----~------~--~---
