发布于 2015-07-25 16:24:05 | 621 次阅读 | 评论: 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', // 定义自己的验证类文件路径
],
];
}
到此基本结束,登录或者注册时,验证码正确通过验证。