Zabezpečení formuláře pomocí Captchy
- .:M@rt!n:.
- Člen | 201
Ahoj,
na webu mám udělanou diskuzi formou klasického formuláře převedeného do
AJAXu. Chtěl bych to zabezpečit captchou, ale bohužel se mě to zatím
nedaří. Jedu podle návodu z doplňků . Nevím zda mám
správně vytvořenou componentu s captchou, ale laděnka hlásí chybu: Call
to undefined method Nette\Application\UI\Form::addCaptcha(). Komponenta pro
diskuzi vypadá takto:
protected function createComponentDiskuzeForm() {
$form = new Form($this, 'captcha');
class_exists('Captcha');
$presenter = $this;
$form->addText('autor', 'Jméno: ', 20, 40)
->addRule(Form::FILLED, 'Je nutné vyplnit políčko pro jméno.');
$form->addTextArea('text', 'Text: ', 60)
->addRule(Form::FILLED, 'Je nutné vyplnit políčko pro text.');
$form->addCaptcha('captcha', 'Antispam')
->setTextColor(Image::rgb(255, 0, 0))
->addRule('Captcha::validateValid', 'Opište správně písmena z obrázku.');
$form->addSubmit('save', 'Odeslat')->setAttribute('class', 'default');
$form->addSubmit('cancel', 'Zrušit')
->setValidationScope(FALSE)
->onClick[] = function () use ($presenter) {
$presenter->redirect('default');
};
$form->onSuccess[] = callback($this, 'diskuzeFormSubmitted');
$form->addProtection('Vypršel časový limit, odešlete formulář znovu.'); //Obrana před Cross-Site Request Forgery (CSRF)
return $form;
}
Díky za rady
- frosty22
- Člen | 373
Podle oné hlášky není ona komponenta zaregistrovaná ve formuláři, díval jsem se na onu dokumentaci v doplňcích a též tam není zmínka o registraci, čili předpokládám, že asi existuje i nějaká magická registrace komponent (či spíše dříve existovala).
Zkus zaregistrovat onu komponentu takto, např. ve startupu (či kdekoliv jinde před vytvářením instance formuláře):
<?php
\Nette\Forms\Form::extensionMethod('addCaptcha', callback(new Captcha, "addCaptcha"));
?>
- .:M@rt!n:.
- Člen | 201
Mám aplikaci rozdělenou na front a admin modul a při zaregistrování komponenty vyskočí nová hláška:
Class 'FrontModule\Captcha' not found
- .:M@rt!n:.
- Člen | 201
tak jsem to zkusil v bootstrapu takhle, ale žádná změna:
require LIBS_DIR . '/Nette.Extras/Captcha.php';