有了模型,我們就可以開始編寫用於操作此模型的邏輯了。 我們將此邏輯放在一個控制器的動作中。將登入表單的範例來講,對應的程式碼是:
public function actionLogin() { $model=new LoginForm; if(isset($_POST['LoginForm'])) { // 收集用户输入的数据 $model->attributes=$_POST['LoginForm']; // 验证用户输入,并在判断输入正确后重定向到前一页 if($model->validate()) $this->redirect(Yii::app()->user->returnUrl); } // 显示登录表单 $this->render('login',array('model'=>$model)); }
如上所示,我們先建立了一個 LoginForm
模型範例; 如果請求是一個POST 請求(表示這個表單表示這個表單被提交了),我們則使用提交的資料 $_POST['LoginForm']
填充 $model
;然後我們驗證此輸入,如果驗證成功,重定向用戶瀏覽器到之前需要身份驗證的頁面。 如果驗證失敗,或此動作初次訪問,我們則渲染 login
視圖,此視圖的內容我們在下一節中講解。
提示: 在
login
動作中,我們使用Yii::app()->user->returnUrl
獲取之前需要身份驗證的頁面URL。 元件Yii::app()->user
是一種 CWebUser (或其子類別) ,它表示使用者會話資訊(例如 使用者名,狀態)。更多詳情, 請參考 驗證與授權.
讓我們特別留意一下 login
動作中出現的下面的PHP 語句:
attributes
屬性由 CModel定義,它接受一個名值對陣列並將其中的每個值賦給對應的模型特性。 因此如果$_POST['LoginForm']
給了我們這樣的一個數組,上面的那段程式碼也就等同於下面冗長的這段(假設數組中存在所有所需的特性):
$model->attributes=$_POST['LoginForm'];
為了使
$_POST['LoginForm']傳遞給我們的是一個陣列而不是字串, 我們需要在命名表單域時遵守一個規範。特定的,對應於模型類別以上就是Yii框架官方指南系列18——使用表單:創建動作的內容,更多相關內容請關注PHP中文網(www.php.cn)!C 中的特性 a
的表單域,我們將其命名為
C[a]。例如,我們可使用
LoginForm[username]命名
username特性對應的表單域。
現在剩下的工作就是創建
login
視圖了,它應該包含一個帶有所需輸入項目的 HTML 表單。