发布于 2015-02-04 00:55:59 | 1253 次阅读 | 评论: 0 | 来源: PHPERZ

这里有新鲜出炉的YII 2.0教程,程序狗速度看过来!

Yii高性能PHP框架

Yii Framework是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。


本文为大家讲解的是一个Yii实现的表单客户端验证和ajax验证示例代码,感兴趣的同学参考下。

User类是gii自动生成的,其中有字段:
public $name;
public $password;
public $email;
public $retype_ps;

register.php页面

<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>

SiteController控制器:

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));
}
}

RegisterForm表单模型

<?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();
}


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务