Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
J'ai un message d'erreur inattendu lors de l'utilisation du décorator callback sur un element.
Je me suis basé sur la doc pour faire un script de test.
Le message de l'exception est :
Warning: Exception caught by form: Invalid callback provided to callback decorator Stack Trace:
#0 C:\php5\pear\Zend\Form\Decorator\Callback.php(88): Zend_Form_Decorator_Callback->setCallback(Array)
#1 C:\php5\pear\Zend\Form\Decorator\Callback.php(108): Zend_Form_Decorator_Callback->getCallback()
#2 C:\php5\pear\Zend\Form\Element.php(1971): Zend_Form_Decorator_Callback->render(...
Et le code concerné :
$element->addDecorator('Callback',array('callback' => array('Util', 'label')));
class Util { public static function label($content, $element, array $options) { return '<span class="label">coucou</span>'; } }
Pourriez vous m'indiquer si quelqu'un a déjà eu ce bug et comment le résoudre.
Cordialement, arnauld.
Dernière modification par neoncyber (26-02-2010 15:15:17)
Hors ligne
C'est pas un bug, il ne peut pas appelé Util::label, c'est tout, à toi de trouver pourquoi.
Hors ligne
Pourrai tu me dire si il est nécessaire d'appeler addprefixpath sur le formulaire pour lui indiqué la class et le path correspondant a la class ? Si je le fait il me dit qu'il n'arrive pas a charger le plugins du décorateur donné dans le prefixpath.
Cordialement.
Hors ligne
Le problème vennait du faite que le nom de ma class ne respectait pas la convention de nomage de zend par rapport a l'arborésence d'ou se place ma classe fourni.
Par ailleur j'ai un nouveau problème, qui ressemble vrement a un bug !
$element->addDecorator('Callback', array('callback' => array('Ad_Util', 'label'), 'placement'=>'null'));
D'apres la doc le placement null devrait remplacer tous le contenu par la valeur retourné par le callback mais il n'en est rien juste append et prepend on un effet. mais avec null contrairement a ce que di la doc il est en append.
Merci a vous .
Hors ligne
Apres etre aller voir le code zend il y a en effet une petite incohérence. Dans la doc il dise qu'il faut mettre NULL alors que dans le source ils disent qu'il faut mettre false...
Bizarement dans le source on a un default qui devrait aussi bien fonctionner avec NULL que avec false, alors pourquoi ca marche avec false et pourquoi pas avec NULL, je me demande...
switch ($placement) { case self::APPEND: return $content . $separator . $response; case self::PREPEND: return $response . $separator . $content; default: // replace content return $response;
Hors ligne
Solution :
path: library/Ad/Util.php
class Ad_Util
{
public static function label($content, $element, array $options)
{
return '<span class="label">coucou</span>';
}
}
$element->addDecorator('callback', array('callback' => array('Ad_Util', 'label'),'placement' => false));
Bye !
Hors ligne
Pages: 1