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
-~----------~----~----~----~------~----~------~--~---