Yii CAPTCHA网址坏了

时间:2012-06-26 11:50:29

标签: yii captcha

我想在我的Yii项目上创建一个AJAX注册表单。因此,在每个页面上,我都有一个登录按钮,如果用户未获得授权,则会显示一个弹出窗口。在该弹出窗口中,他可以看到包含电子邮件字段,密码字段和CAPTCHA(默认Yii验证码)的注册表单。

因此,我的用户注册模型是User。有一个验证规则:

array('code', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest),

我的控制器,所有用户的操作都是User(url:site.url / user /),我添加了验证码操作:

'captcha'=>array(
    'class'=>'CCaptchaAction',
    'backColor'=>0xFFFFFF,
    'foreColor'=>0x000000,
),

在我的下一个代码中:

$this->widget('CCaptcha', array(
    'clickableImage'    => true,
    'showRefreshButton' => false,
))

这是一个问题:(在弹出窗口内,可以显示在每个页面上(索引页面,例如,属于主控制器)验证码想要从该控制器加载图像(来自/ main / captcha,不是/ user / captcha)。

在每个控制器中添加验证码是个坏主意,所以我添加了

'captchaAction' => '/user/captcha',

但之后验证码想从网址加载

http://site.loc/user/captcha/v/4fe99aca1bbed

用户友好的网址崩溃的验证码,我无法避免它(因为我认为,不是一个yii专家,这是因为常见的路径配置)。

有一个简单的解决方案可以解决这个问题吗?我应该修复URL还是重新配置CAPTCHA?

1 个答案:

答案 0 :(得分:3)

所以,在我等待帮助的同时,我自己解决了这个问题:) 在我的项目中,我将控制器分成下一个层次结构:

/frontend
/backend

普通用户的所有控制器(当然)都在前端部分,包括UserController和MainController。

是的,我在URL中写了一些隐藏/前端/的配置:

'<c:\w+>/<a:\w+>' => 'frontend/<c>/<a>',

我确信,我的CAPTCHA配置中的字符串('captchaAction'=&gt;'/ user / captcha')知道去哪里(而且几乎是这样!),但是没有!

我应该将FULL PATH写入我的控制器并执行如下操作:

'captchaAction' => '/frontend/main/captcha',

正如我所说的那样,我将我的CAPTCHA动作放在UserController中,但是现在你可以看到它位于MainController中(我从UserController中删除了它)

我收到了一个错误:

CCaptchaValidator.action "captcha" is invalid. Unable to find such an action in the current controller. 

所以,要解决这个问题,我只需在我的用户模型中使用CCaptchaValidator的属性captchaAction!代码:

array('code', 'captcha', 'captchaAction'=>'/frontend/main/captcha', 'allowEmpty'=>!Yii::app()->user->isGuest)

所以,现在我的AJAX Captcha验证在我想要的地方正常工作。

祝Yii的默认CAPTCHA好运,亲爱的社区!