2

我正在开发一个简单的网络表单来收集我网站访问者的反馈。由于访问者未经过身份验证,我想为用户实施图像验证步骤。我在 atk4 文档中进行了搜索,但找不到类似实现的任何参考。我还检查了 at4-addons 源并找到了两个资源 - View_ReCaptcha 和 Form_Field_Verification。

我不确定我应该关注哪一个。是否有任何示例代码或教程可供我参考,为我的 Web 表单实现图像验证步骤?

4

1 回答 1

2

敏捷工具包中的KCapcha

这实现了验证码的非常核心的实现,无需使用任何控制器或视图。当然不鼓励这样编码,但如果你有你的最后期限,这是你可以使用的最后手段:

$sec_image_field = $f->addField('line', 'sec_image', 'Security code')
    ->setNotNull()
    ->setNoSave();


$captcha_src = '/lib/kcaptcha/?' . $session_name . '=' . session_id();
$kaptcha_img = $sec_image_field->getTag('img',array('src' => $captcha_src, 'id' => 'kpt' ));
$kaptcha_img .= ' <a href="#" onclick="d=new Date(); (jQuery(\'#kpt\')'.
   '.attr(\'src\', \'' . $captcha_src . '&t=\' + d.getTime()));return false;">';
$kaptcha_img .= '<i class="atk-icon atk-icons-nobg atk-icon-arrows-left3"></i>';
$kaptcha_img .= ' reload</a>';
$sec_image_field->template->set('after_field', '<ins>Enther the code you see below</ins> <span>' . $kaptcha_img . '</span>'

注意:您需要从他们的网站下载 kcapcha 并将其安装到 /lib/kcapcha/ 中。

示例:http ://agiletech.ie/contact

敏捷工具包中的ReCapcha

您发现的 ReCapcha 实现要好得多,但并不理想。它手动查看 POST 数据并简单地设置标志,告诉您输入是否正确。这是示例用法:

$rc = $form->add('View_ReCaptcha');
....
if($form->isSubmitted()){
    ...

    if(!$rc->isValid()){

        $js=$this->js->univ();

        if($r->getError()){
            $js->alert($rc->getError());
        }else{
            $js->alert('Error in capcha');
        }
        $js->execute();
    }
    ....
}

注意:您需要安装 recapcha lib。见源。

制作更好的验证码

可能最好的方法是引入一种新的字段类型(Form_Field_Capcha),它完全自动完成整个事情。它不应该捆绑任何 PHP 库,而是依赖 3rd 方服务来生成图像。它还必须使用标准的表单验证

于 2011-10-07T14:39:16.240 回答