在YII的模块中,使用<?php $this->widget(‘CCaptcha‘); ?>无法加载进来验证码。
解决的方法是<?php $this->widget(‘CCaptcha‘, array(‘captchaAction‘=>‘/controllerName/captcha‘)); ?>
在controller中需要设置
public function actions()
{
return array(
‘captcha‘=>array(
‘class‘=>‘CCaptchaAction‘,
‘backColor‘=>0xFFFFFF,
),
);
}
但是刷新验证码还有问题
考虑到少动框架的代码,所以自己写js.
<script type="text/javascript">
$(function(){
$(‘#yw0_button‘).click(function(event) {
$.ajax({
url: "/index.php/back/captcha/refresh/1",
dataType: ‘json‘,
cache: false,
success: function(data) {
$(‘#yw0‘).attr(‘src‘, ‘/index.php‘+data[‘url‘]);
$(‘body‘).data(‘/back/captcha.hash‘, [data[‘hash1‘], data[‘hash2‘]]);
}
});
return false;
});
})
</script>
根据分析,发现是刷新后的地址缺少/index.php,所以模仿widget生成的js来写。另外,js从页面下方开始执行,所以这行代码需要写在widget生成的js下面。我写在页面最下方。同时return false;必不可少。有类似exit或者阻止冒泡(但感觉好像不能算)的效果,即不让widget的js执行。