发布于 2015-07-25 16:24:05 | 639 次阅读 | 评论: 1 | 来源: PHPERZ
			Yii高性能PHP框架
Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。		
Yii框架支持表单的Ajax验证,只需要在view视图输出表单是,指定一个属性。
$form = ActiveForm::begin(['id' => 'form-signup']);
$form->enableAjaxValidation = true;
不过,在支持验证码ajax验证时出现一个问题,使用ajax验证返回成功之后,表单再次提交会提示验证码错误,可以通过自定义验证码类来解决这个问题。
模型添加验证规则:
public $verifyCode;
public function rules()
{
    return [
        // 其他规则
        // 验证码规则
        ['verifyCode', 'required'],
        ['verifyCode', 'captcha'],
    ];
}
视图部分:
use use yii\captcha\Captcha;
$form = ActionForm::beigin(['id' => 'form-signup']);
$form->enableAjaxValidation = true;
// 其他字段
$form->field($model,'verifyCode')->widget(
Captcha::className(), 
[
    'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-8">{input}</div></div>',
]
)
控制器部分:
// 定义自己的验证码类
namespace forontend\controllers; // 具体根据自己的项目定义
use Yii;
use yii\captcha\CaptchaAction;
class CaptchaUserController extends CaptchaAction
{
    public function validate($input, $caseSensitive)
    {
        $code = $this->getVerifyCode();
        $valid = $caseSensitive ? ($input === $code) : strcasecmp($input, $code) === 0;
        $session = Yii::$app->getSession();
        $session->open();
        $name = $this->getSessionKey().'count';
        $session[$name] = $session[$name] + 1;
        if ($valid || $session[$name] > $this->testLimit && $this->testLimit > 0)
        {
            // 修改为允许ajax二次验证
            if (Yii::$app->request->isAjax === false)
                $this->getVerifyCode(true);
        }
        return $valid;
    }
}
提交到的控制器也需要指定下验证码类的路径
SiteController
// 其他代码
public function actions()
{
    return [
        // 其他actions
        'captcha' => [
            'class' => 'frontend\controllers\CaptchaUserController', // 定义自己的验证类文件路径
        ],
    ];
}
到此基本结束,登录或者注册时,验证码正确通过验证。