2014年7月5日 星期六

yii framework - 如何用AJAX來做表單驗證 (server端)

在我們使用gii來建立我們的CURD後, 我們可以在Controller最下面看到這個function

protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='house-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}

原來~ yii已經幫我們建立好AJAX的驗證code了!
那我們來實作吧!


STEP 1
在Contorller裡需要用到AJAX的action加上這句:
$this->performAjaxValidation($model);

結果就會像這樣:

public function actionCreate()
{
$model=new Bnb;
$this->performAjaxValidation($model);

if(isset($_POST['Bnb']))
{
$model->attributes=$_POST['House'];
if($model->save())
$this->redirect(array('view', 'id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));

}


STEP 2
view裡的_form.php打開AJAX服務

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'house-form',
'enableAjaxValidation'=>true,
)); ?>



NOTE:
驗證的相關規則是在models裡喔! 

ex:
public function rules()
{
return array(
array('adminId, adminPw, 'required'),
array('adminMail', 'email'),
);
}

yii內建的驗證功能如下:(CValidator)

required
驗證屬性值必需有值,不能為空
fil​​ter
用過濾器轉換屬性的值
match
驗證屬性值匹配一個正則表達式
email
驗證屬性值為有一個有效的Email地址
url
驗證屬性值是一個有效的URL
unique
驗證屬性值在表中的對應列中是唯一的
compare
驗證屬性值與另一個屬性的值相等
length
驗證屬性值的長度在一個範圍內
in
驗證屬性值在一個預定義列表中
numerical
驗證屬性值是數字
captcha
驗證屬性的值等於一個顯示的CAPTCHA(驗證碼)的值
file
驗證屬性值包含上傳的文件
type
驗證屬性值是一個指定的數據類型
default
驗證屬性值為分配的默認值
exist
驗證屬性值在表中的對應列中存在
boolean
驗證屬性值是布爾值(true或false)
safe
標記屬性值為安全
unsafe
標記屬性值為不安全
date
驗證屬性值是日期


沒有留言:

張貼留言