Updated on – April 11, 2013
Download Captcha Component for CakePHP 1.x
Download Captcha Component for Cakephp 2.x
Model validation to validate captcha field value included with examples. Functions(rules) required for model validation are also written in the model file.
———————————————————-
Follow these simple steps to make it working.
Copy attached font file (monofont) to ‘webroot’ folder.
Copy component file (captcha.php) to app/controllers/components
Create a function similar to the following in your controller. I have used “signups” controller for demonstration purpose. You should change controller name accordingly.
function captcha() {
$this->autoRender = false;
$this->layout='ajax';
if(!isset($this->Captcha)) { //if Component was not loaded throug $components array()
App::import('Component','Captcha'); //load it
$this->Captcha = new CaptchaComponent(); //make instance
$this->Captcha->startup($this); //and do some manual calling
}
//$width = isset($_GET['width']) ? $_GET['width'] : '120';
//$height = isset($_GET['height']) ? $_GET['height'] : '40';
//$characters = isset($_GET['characters']) && $_GET['characters'] > 1 ? $_GET['characters'] : '6';
//$this->Captcha->create($width, $height, $characters); //options, default are 120, 40, 6.
$this->Captcha->create();
}
Call the captcha action from within your img tag in the view file as below:
echo $form->create("Signups");
echo $html->image($html->url(array('controller'=>'signups', 'action'=>'captcha'), true),array('style'=>'','vspace'=>2)); ?>
echo 'Enter the given security code:';
echo $form->input('Signup.captcha',array('autocomplete'=>'off','label'=>false,'class'=>'','error'=>__('Failed validating code',true)));
echo $form->submit(__(' Submit ',true));
echo $form->end();
And you are done. The captcha image should look like 
Also, you can re-generate the captcha by adding (replacing code in line 2 of the above) ajax code something similar to the following:
<div id="captchaID" ><?php
echo $html->image($html->url(array('controller'=>'signups', 'action'=>'captcha'), true),array('style'=>'','vspace'=>2)); ?></div>
<?php echo $ajax->link('Can not read this code? Reload.','regenerate code',array('url'=>'reload_captcha','update'=>'captchaID')); ?>
In the code above it calls a reload_captcha function of the current controller. You can place reload_captcha in current controller or preferrably in the app_controller to make it available universally. Here’s the code:
function reload_captcha() {
App::import('Component','Captcha'); //load it
$this->Captcha = new CaptchaComponent(); //make instance
$this->Captcha->startup($this); //and do some manually calling
$this->layout='ajax';
Configure::write('debug',0);
$this->viewPath = 'elements'.DS;
$this->render('reload_captcha');
}
It renders a reload_captcha element. Create a reload_captcha.ctp file and place it in views/elements with the following code:
<?php echo $html->image($html->url(array('controller'=>'signups', 'action'=>'captcha'), true),array('style'=>'','vspace'=>2)); ?>
There is model validation code included in the files with example of how to validate it. Files include a model with new validation entry along with two rules (functions).
Download Captcha Component for Cakephp 1.x
Download Captcha Component for Cakephp 2.x
Recent Comments
Arvind Thakur on Simple captcha component for CakePHP 2.x
Check php error log for possible errors. I may need to see your implementation of code.Ritika on Simple captcha component for CakePHP 2.x
I am using your code but image is not loading ??whyaaron on Object doesn’t support this property or method javascript error
I had the same situation as you. I was assigning a non-declared variable to a calculation. I was searching stackoverflow...priyanshu on Resume download of PART extension file in Firefox
yes i resumed my 1.07 gb file from 790mb thanks.................Arvind Thakur on Simple captcha component for CakePHP 2.x
Can i see your your code? It works fine with 2.3.5.