使用Yii來建立一個登入表單
model建立在protected\models
下,config需要設定import
動作流程大概是這樣:
- 進入
site/login
- 在actionLogin中create form data model,catch POST,render login page
1 | $model = new LoginForm; |
- 在LoginForm model中處理資料驗證,覆寫rules()
1 | public function rules() |
- 如果驗證都無誤,redirect到user->returnUrl,預設是’',可以setReturnUrl()修改
LoginForm model中有用到authenticate(),這個方法是要自己寫的,
用來驗證password的Validator
1 | public function authenticate($attribute, $params) |
這邊用一個自訂的class UserIdentity extends CUserIdentity,
繼承自CUserIdentity的authenticate()是需要自行覆寫的,不然預設就是丟一個例外
CUserIdentity中也有預定義一些errorCode的常數可以用
1 | class UserIdentity extends CUserIdentity |
在view中可以使用yii helperCHtml::beginForm()
或是widgetbeginWidget('CActiveForm')
來建立表單,兩種略有不同
程式就直接參考form.view
可以看到建出來的input html是用陣列的形式填充輸入資料
1 | <input name="LoginForm[username]" id="LoginForm_username" type="text" /> |
所以在上面action中我們才能直接使用$_POST['LoginForm']
取得整個form data並且填進data model中。