1.創建模型
a.加入基類
use yii/base/Model
b.創建類繼承自基類
c.創建所需要的變量
e.定義規則
f.注意裡面用[]括起來
例如:
<?php namespace app\models; use yii\base\Model; class EntryForm extends Model { public $name; public $email; public function rules() { return [ [['name', 'email'], 'required'], ['email', 'email'], ]; } }
該類繼承自Yii 提供的一個基類 [[yii\base\Model]],該基類通常用來表示數據
補充:[[yii\base\Model]] 被用於普通模型類的父類並與數據表無關。[[yii\db\ActiveRecord]] 通常是普通模型類的父類但與數據表有關聯(譯注:[[yii\db\ActiveRecord]] 類其實也是繼承自 [[yii\base\Model]],增加了數據庫處理)。
EntryForm
類包含name
和rules()
的方法,用來返回數據驗證規則的集合。上面聲明的驗證規則表示:
name
和 email
值都是必須的
email
的值必須滿足email規則驗證如果你有一個處理用戶提交數據的 EntryForm
對象,你可以調用它的 [[yii\base\Model::validate()|validate()]] 方法觸發數據驗證。如果有數據驗證失敗,將把 [[yii\base\Model::hasErrors|hasErrors]] 屬性設為 ture,想要知道具體發生什麼錯誤就調用 [[yii\base\Model::getErrors|getErrors]]。
<?php $model = new EntryForm(); $model->name = 'Qiang'; $model->email = 'bad'; if ($model->validate()) { // 驗證成功! } else { // 失敗! // 使用 $model->getErrors() 獲取錯誤詳情 }
2.創建操作
下面你得在
site
控制器中創建一個entry
操作用於新建的模型。操作的創建和使用已經在說一聲你好小節中解釋了。<?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\EntryForm; class SiteController extends Controller { // ...其它代碼... public function actionEntry() { $model = new EntryForm; if ($model->load(Yii::$app->request->post()) && $model->validate()) { // 驗證 $model 收到的數據 // 做些有意義的事 ... return $this->render('entry-confirm', ['model' => $model]); } else { // 無論是初始化顯示還是數據驗證錯誤 return $this->render('entry', ['model' => $model]); } } }該操作首先創建了一個
EntryForm
對象。然後嘗試從$_POST
搜集用戶提交的數據,由 Yii 的 [[yii\web\Request::post()]] 方法負責搜集。如果模型被成功填充數據(也就是說用戶已經提交了 HTML 表單),操作將調用 [[yii\base\Model::validate()|validate()]] 去確保用戶提交的是有效數據。補充:表達式
Yii::$app
代表應用實例,它是一個全局可訪問的單例。同時它也是一個服務定位器,能提供request
,response
,db
等等特定功能的組件。在上面的代碼裡就是使用request
組件來訪問應用實例收到的$_POST
數據。用戶提交表單後,操作將會渲染一個名為
entry-confirm
的視圖去確認用戶輸入的數據。如果沒填表單就提交,或數據包含錯誤(譯者:如 email 格式不對),entry
視圖將會渲染輸出,連同表單一起輸出的還有驗證錯誤的詳細信息。注意:在這個簡單例子裡我們只是呈現了有效數據的確認頁面。實踐中你應該考慮使用 [[yii\web\Controller::refresh()|refresh()]] 或 [[yii\web\Controller::redirect()|redirect()]] 去避免表單重復提交問題。
3.創建視圖
最後創建兩個視圖文件
entry-confirm
和entry
。他們會被剛才創建的entry
操作渲染。
entry-confirm
視圖簡單地顯示提交的 name 和 email 數據。視圖文件保存在views/site/entry-confirm.php
。
<?php use yii\helpers\Html; ?> <p>You have entered the following information:</p> <ul> <li><label>Name</label>: <?= Html::encode($model->name) ?></li> <li><label>Email</label>: <?= Html::encode($model->email) ?></li> </ul>
entry
視圖顯示一個 HTML 表單。視圖文件保存在views/site/entry.php
<?php use yii\helpers\Html; use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name') ?> <?= $form->field($model, 'email') ?> <div class="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?>
視圖使用了一個功能強大的小部件 [[yii\widgets\ActiveForm|ActiveForm]] 去生成 HTML 表單。其中的
begin()
和end()
分別用來渲染表單的開始和關閉標簽。在這兩個方法之間使用了 [[yii\widgets\ActiveForm::field()|field()]] 方法去創建輸入框。第一個輸入框用於 “name”,第二個輸入框用於 “email”。之後使用 [[yii\helpers\Html::submitButton()]] 方法生成提交按鈕。use yii\helpers\Html; use yii\wigets\ActiveForm;
記住使用小部件,需要引入這個兩個