Heey allemaal,

Ik ben bezig met zend_captcha. Deze geeft echter als default error "Captcha value is wrong". Nu wil ik dit vervangen door mijn eigen error.

Ik heb hier 2 opties voor:
1. We openen Zend_Captcha_Word en veranderen daar de error melding
2. We voegen in Zend_Captcha_Word de volgende functie toe:

<?php
/**
* Set error message of bad captcha
*
* @param string $message
* @return Zend_Captcha_Word
*/
public function setErrorMessage($message)
{
$this->_messageTemplates[self::BAD_CAPTCHA] = $message;
return $this;
}
?>

En dan kan ik gewoon de error meegeven bij het initialiseren.

Dit zijn beide geen ideale opties. Optie 1 niet omdat ik mijn error message flexibel wil houden en niet hard wil defineren. Optie 2 niet omdat ik daarmee een functie toevoeg aan het framework en ik de code daarmee niet meer kan kopieren naar een andere server met Zend zonder ook die aangepaste class mee te kopieren.

Wat blijft er dan nog over? Zend_Captcha_Word extenden, in die class de functie toevoegen uit optie 2 en vervolgens

$var = new deGeextendeClasse;
$var->SetErrorMessage('bla');

doen. Die optie valt echter ook af aangezien Zend_Captcha_Word een abstracte class is, dus de geextende class ook abstract moet zijn en die mag ik niet rechtstreeks benaderen.

En nu weet ik niet meer wat ik moet doen. Iemand die me hierbij kan helpen?

Groet
Newb
Kan je hem niet extenden (ja, ook ik heb m'n twijfels hierbij wanneer ik dit zo typ) om de $_messageTemplates property te vervangen?

edit: of zou het via Zend...Captach::setOption('_messageTemplates', array()) lukken?
Ik krijg het daarmee niet voor elkaar... Toch vreemd dat hier op internet ook niks over te vinden is, ik zal toch niet de enige zijn met dit probleem?
Wat probeer je op het moment? Kan je een hele kleine setup maken waarin je alleen dit probleem naar voren kan laten komen?

(Ik heb ZF wel in m'n include_path staan, maar gebruik het zo goed als nooit. Wanneer je een opstapje geeft is het voor mij, en anderen de drempel wat lager om te proberen.)

Of kan je anders laten zien hoe je de instanties aanmaakt & raadpleegt?
Dit is het hele captcha verhaal:

<?php
$captcha = new Zend_Form_Element_Captcha('captcha', array('captcha' => array('captcha' => 'Image',
'fontSize' => 38,
'wordLen' => 5,
'timeout' => 300,
'LineNoiseLevel' => 4,
'DotNoiseLevel' => 30,
'ErrorMessage' => 'test',
'font' => $_SERVER['DOCUMENT_ROOT'] . '/KINGRICH.TTF',
'imgDir' => $_SERVER['DOCUMENT_ROOT'] . '/application/tmp/captcha/',
'imgUrl' => Zend_Controller_Front::getInstance()->getBaseUrl().'/application/tmp/captcha/'),
'imgAlt' => 'Captcha')
);

$captcha->setLabel('Voer code in');
?>

Aanroepen doe ik zo:

<?php
$form = new CaptchaForm();

$this->view->form = $form;

if ($this->_request->isPost())
{
$formData = $this->_request->getPost();

if(!$form->isValid($formData))
{
$form->populate($formData);
}
else
{
$this->view->message = 'De goede code';
}
}
?>

Voorbeeld
Werkt het niet simpelweg zo? (even incompleet gekopieerd en geplakt)
<?php
$captcha = new Zend_Form_Element_Captcha('captcha', array('captcha' => array(
'_messageTemplates' => array(
Zend_Captcha_Word::MISSING_VALUE => 'Missende value',
Zend_Captcha_Word::MISSING_ID => 'Missende identiteit',
Zend_Captcha_Word::BAD_CAPTCHA => 'BEEEP Fout!'
),
'captcha' => 'Image',
'fontSize' => 38,
'wordLen' => 5,
'timeout' => 300,
'LineNoiseLevel' => 4,
'DotNoiseLevel' => 30,
'ErrorMessage' => 'test',
'font' => '/Library/Fonts/Microsoft/Gill Sans MT.ttf',
'imgDir' => '/tmp/'),
'imgAlt' => 'Captcha')
);

$captcha->isValid(array('captcha' => 'Pindakaas'));

var_dump($captcha);
?>
Wanneer ik nu $captcha->isValid(array('captcha' => 'Pindakaas')) aanroep, en var_dump($captcha) eruit gooi, zie ik alleen maar Nederlandse foutmeldingen in de dump.
Heerlijk, dank u :-D
Geweldig!

Ik zat zelf te kloten met het volgende:
$captcha -> addErrorMessage('De tekens waren niet gelijk!');

maar dat werkte niet op de een of andere manier.. Nu deze maar eens proberen!

Reageren