3

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

所以,我的用户注册模型是用户。有一个验证规则:

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

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

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

在我的下一个代码中:

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

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

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

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

但在那之后验证码想从一个网址加载

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

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

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

4

1 回答 1

3

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

/frontend
/backend

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

是的,我写了一些配置来隐藏 URL 中的 /frontend/,如下所示:

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

而且我确信,我的验证码配置中的那个字符串('captchaAction' => '/user/captcha')知道去哪里(几乎就是这样!),但不!

我应该将完整路径写入我的控制器并执行如下操作:

'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 的默认验证码好运!

于 2012-06-27T13:30:22.803 回答