Contributte Seznamcaptcha
# Content
- Usage - how to register
- Extension - how to configure
- Form - setup nette form
- Rendering - auto vs manual
- Example - advanced example
# Usage
extensions:
captcha: Contributte\SeznamCaptcha\DI\SeznamCaptchaExtension
1
2
2
# Configuration
By default is auto: on
and method: http
, you can disable it and bind addCaptcha to your forms by yourself.
captcha:
auto: off # on | off
method: xmlrpc # http | xmlrpc
1
2
3
2
3
# Form
Just register an extension and keep auto
argument as it is.
use Nette\Application\UI\Form;
protected function createComponentForm()
{
$form = new Form();
$form->addCaptcha('captcha')
->setRequired('Are you robot?');
$form->addSubmit('send');
$form->onSuccess[] = function (Form $form) {
dump($form['captcha']);
};
return $form;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Rendering
# Automatic
{control form}
1
# Manual
It needs a CaptchaContainer
consists of 2 inputs image
and code
.
<form n:name="form">
{input captcha-image}
{input captcha-code}
</form>
1
2
3
4
2
3
4
# Example
use Minetro\SeznamCaptcha\Forms\CaptchaHash;
use Minetro\SeznamCaptcha\Forms\CaptchaImage;
use Minetro\SeznamCaptcha\Forms\CaptchaInput;
use Minetro\SeznamCaptcha\Provider\CaptchaValidator;
use Minetro\SeznamCaptcha\Provider\ProviderFactory;
use Nette\Application\UI\Form;
/** @var ProviderFactory @inject */
public $providerFactory;
protected function createComponentForm()
{
$form = new Form();
$provider = $this->providerFactory->create();
$form['image'] = new CaptchaImage('Captcha', $provider);
$form['hash'] = new CaptchaHash($provider);
$form['code'] = new CaptchaInput('Code');
$form->addSubmit('send');
$form->onValidate[] = function (Form $form) use ($provider) {
$validator = new CaptchaValidator($provider);
$hash = $form['hash']->getHttpHash();
$code = $form['code']->getHttpCode();
if ($validator->validate($code, $hash) !== TRUE) {
$form->addError('Are you robot?');
}
};
$form->onSuccess[] = function (Form $form) {
dump($form);
};
return $form;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
For better usability add this functionality to your BaseForms
, BaseFormFactory
or
something like this.
You can also create a trait for it.