首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 框架用戶註冊表單驗證完整實例

     編輯:PHP 相關知識

Yii 框架用戶註冊表單驗證完整實例

Yii 框架提供了強大的表單驗證機制,基於模型層的 rules() 方法定義驗證規則,配合視圖層的 CActiveForm 小部件自動生成表單並顯示錯誤提示。本文通過一個完整的用戶註冊案例,展示視圖、模型、控制器三層的協作流程。

一、視圖層:使用 CActiveForm 構建表單

文件:protected/views/user/register.php

<?php $form = $this->beginWidget('CActiveForm'); ?>

<!-- 用戶名 -->
<?php echo $form->labelEx($model, 'username'); ?>
<?php echo $form->textField($model, 'username'); ?>
<?php echo $form->error($model, 'username'); ?>
<br>

<!-- 密碼 -->
<?php echo $form->labelEx($model, 'password'); ?>
<?php echo $form->passwordField($model, 'password'); ?>
<?php echo $form->error($model, 'password'); ?>
<br>

<!-- 確認密碼 -->
<?php echo $form->labelEx($model, 'password2'); ?>
<?php echo $form->passwordField($model, 'password2'); ?>
<?php echo $form->error($model, 'password2'); ?>
<br>

<!-- 郵箱 -->
<?php echo $form->labelEx($model, 'email'); ?>
<?php echo $form->textField($model, 'email'); ?>
<?php echo $form->error($model, 'email'); ?>
<br>

<!-- 性別(單選) -->
<?php echo $form->labelEx($model, 'sex'); ?>
<?php echo $form->radioButtonList($model, 'sex', array(1=>'男', 2=>'女'), array("separator"=>" ")); ?>
<br>

<!-- 年級(下拉選擇) -->
<?php echo $form->labelEx($model, 'grade'); ?>
<?php echo $form->dropDownList($model, 'grade', array(0=>"--請選擇--", 1=>"2010級", 2=>"2011級", 3=>"2012級")); ?>
<?php echo $form->error($model, 'grade'); ?>
<br>

<!-- 愛好(多選) -->
<?php echo $form->labelEx($model, 'hobby'); ?>
<?php echo $form->checkBoxList($model, 'hobby', array(1=>"籃球", 2=>"足球", 3=>"排球"), array("separator"=>" ")); ?>
<?php echo $form->error($model, 'hobby'); ?>

<!-- 提交按鈕 -->
<?php echo CHtml::submitButton('提交'); ?>
<?php $this->endWidget(); ?>

關鍵點: 所有表單字段通過 $form-> 方法綁定模型屬性,error() 自動顯示驗證失敗信息。

二、模型層:定義驗證規則與自定義驗證

文件:protected/models/User.php

class User extends CActiveRecord {
    public $password2; // 非數據庫字段,僅用於表單驗證

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return '{{user}}'; // 自動識別表前綴
    }

    public function attributeLabels() {
        return array(
            "username" => "姓名",
            "password" => "密碼",
            "password2" => "確認密碼",
            "email" => "郵箱",
            "sex" => "性別",
            "grade" => "年級",
            "hobby" => "愛好",
        );
    }

    public function rules() {
        return array(
            array("username", "required", "message" => "用戶名不能為空"),
            array("password", "required", "message" => "密碼不能為空"),
            // 密碼比對驗證
            array("password2", "compare", "compareAttribute" => "password", "message" => "兩次密碼不一致"),
            // 郵箱格式驗證
            array("email", "email", "allowEmpty" => false, "message" => "郵箱格式不正確"),
            // 年級範圍驗證
            array("grade", "in", "range" => array(1,2,3), "message" => "請選擇年級"),
            // 自定義驗證方法:愛好至少選 2 個
            array("hobby", "checkHobby"),
        );
    }

    // 自定義驗證方法
    public function checkHobby() {
        $len = strlen($this->hobby); // 注意:checkBoxList 提交為逗號分隔字符串
        if ($len < 3) { // 簡易判斷,實際應用建議用 count(explode(','))
            $this->addError("hobby", "愛好至少為 2 個以上");
        }
    }
}

核心驗證類型:

  • required:必填
  • compare:比對兩字段值
  • email:郵箱格式
  • in:值在指定範圍內
  • 自定義方法:方法名對應 rules 最後一項,通過 addError() 添加錯誤

三、控制器層:處理表單提交與保存

文件:protected/controllers/UserController.php

public function actionAdd() {
    $user = new User();

    if (isset($_POST['User'])) {
        // 處理多選框數組轉字符串存儲
        if (is_array($_POST['User']['hobby'])) {
            $_POST['User']['hobby'] = implode(",", $_POST['User']['hobby']);
        }

        $user->attributes = $_POST['User']; // 批量賦值

        if ($user->save()) {
            echo 'success';
        } else {
            echo 'error';
        }
    }

    $this->renderPartial("register", array("model" => $user));
}

流程說明:

  1. 實例化模型
  2. 檢測 POST 提交
  3. 預處理數組類型字段(如 checkbox)
  4. 批量賦值觸發驗證
  5. save() 成功則入庫,失敗自動保留錯誤信息回顯表單

四、自動驗證機制總結

Yii 的表單驗證核心在於模型層:

  • 表單字段名與數據庫字段名一致時,attributes 批量賦值自動映射
  • 驗證規則集中在 rules() 定義,支持內置驗證器與自定義方法
  • 視圖層無需手寫判斷邏輯,CActiveForm 自動綁定錯誤顯示
  • 非數據庫字段(如確認密碼)在模型中聲明 public 屬性即可參與驗證

總結

本例展示了 Yii 表單驗證的標準 MVC 協作模式:視圖負責渲染與綁定,模型封裝業務規則與驗證邏輯,控制器處理請求流轉。掌握 CActiveForm、rules()、自定義驗證方法及多選框數據處理,能快速構建健壯的表單交互功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved