发布于 2015-02-04 00:55:59 | 1253 次阅读 | 评论: 0 | 来源: PHPERZ
Yii高性能PHP框架
Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。
本文为大家讲解的是一个Yii实现的表单客户端验证和ajax验证示例代码,感兴趣的同学参考下。
<div class="create-marketer">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'register-form',
'action' => array('site/index'),
'enableAjaxValidation'=>true,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
));?>
<div class="item">
<label class="tip">用户名<font color="red">*</font></label>
<?php echo $form->textField($model, 'name', array('size' => 20, 'maxlength' => 31, 'class' => 'username',)); ?>
<?php echo $form->error($model,'name'); ?>
</div>
<div class="item">
<label class="tip">密码<font color="red">*</font></label>
<?php echo $form->passwordField($model,'password', array('size'=>20,'maxlength'=>63,'class'=>'password')); ?>
<?php echo $form->error($model,'password'); ?>
</div>
<div class="item">
<label class="tip">确认密码<font color="red">*</font></label>
<?php echo $form->passwordField($model,'retype_ps', array('size'=>20,'maxlength'=>63,'class'=>'retype-ps')); ?>
<?php echo $form->error($model,'retype_ps'); ?>
</div>
<div class="item">
<label class="tip">Email<font color="red">*</font></label>
<?php echo $form->textField($model,'email',array('size'=>20,'maxlength'=>31,'class'=>'email')); ?>
<?php echo $form->error($model,'email'); ?>
</div>
<div class="operation">
<?php echo CHtml::submitButton('Register', array('id' => 'submit')); ?>
</div>
<?php $this->endWidget(); ?>
</div>
class SiteController extends Controller
{
public function actionIndex()
{
$model=new RegisterForm();
if(isset($_POST['ajax']) && $_POST['ajax']==='register-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
// 判断表单是否提交,LoginForm及为表单model的名字
if(isset($_POST['RegisterForm']))
{
//设置model中对应的属性值
$model->attributes=$_POST['RegisterForm'];
/* validate user input and redirect to the previous page if valid
* $model中有自己的validate方法,而login方法就需要自己写了,
* 如果登录成功就返回到上个进入此页面的页面
*/
if($model->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
$this->render('index',array('model'=>$model));
}
}
<?php
class RegisterForm extends CFormModel
{
public $name;
public $password;
public $email;
public $retype_ps;
/**
* Declares the validation rules.
* The rules state that username and password are required,
* and password needs to be authenticated.
*/
public function rules()
{
return array(
// username and password are required
array('name, password, retype_ps, email', 'required', 'message' => '不能为空'),
// password needs to be authenticated
array('name', 'authenticate'),
array('name', 'length', 'max'=>50),
array('name', 'unique', 'attributeName'=> 'name', 'caseSensitive' => 'false', 'className' => 'User', 'message' => '用户名已在'),
array('email', 'email', 'message' => '邮箱格式不正确'),
array('password', 'checkOldPassword'),
array('name, password, retype_ps, email', 'safe'),
);
}
/**
* 在提交表单的时候才进行验证.
* This is the 'authenticate' validator as declared in rules().
*/
public function authenticate($attribute,$params)
{
$user = User::model()->find('id = :id', array(':id' => 1));
if(!$this->hasErrors())
{
if($user){
$this->addError('name', '值为空');
return false;
}
else {
return true;
}
}
}
// 自己定义的旧密码是否正确的函数
public function checkOldPassword($attribute,$params)
{
$record=User::model()->findByAttributes(array('password'=>$this->password));
if($record===null){
$this->addError($attribute, '密码不可用');
}
}
}
yii的表单客户端验证和ajax验证关键点在于enableAjaxValidation和enableClientValidation,clientOption参数
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'register-form',
'action' => array('site/index'),
'enableAjaxValidation'=>true,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
));?>
如果启用了ajax验证控制器里必须要有如下代码
$model=new RegisterForm();
if(isset($_POST['ajax']) && $_POST['ajax']==='register-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}