1.建立模型
a.加入基類
use yii/base/Model
b.創建類繼承自基類f.注意裡面用[]括起來
例如:
<?<span>php namespace app\models; </span><span>use</span><span> yii\base\Model; </span><span>class</span> EntryForm <span>extends</span><span> Model { </span><span>public</span> <span>$name</span><span>; </span><span>public</span> <span>$email</span><span>; </span><span>public</span> <span>function</span><span> rules() { </span><span>return</span><span> [ [[</span>'name', 'email'], 'required'],<span> [</span>'email', 'email'],<span> ]; } }</span>登入後複製
此類別繼承自Yii 提供的一個基底類別 [[yiibaseModel]],該基底類別通常用來表示資料
補充:[[yiibaseModel]] 被用於普通模型類別的父類別並與資料表無關。 [[yiidbActiveRecord]] 通常是普通模型類別的父類別但與資料表有關聯(譯註:[[yiidbActiveRecord]] 類別其實也是繼承自 [[yiibaseModel]],增加了資料庫處理)。EntryForm類別包含 name 和
email兩個公共成員,用來儲存使用者輸入的資料。它也包含一個名為
rules()
的方法,用來傳回資料驗證規則的集合。上面聲明的驗證規則表示:
name
和
的值必須滿足email規則驗證
如果你有一個處理用戶提交資料的
- EntryForm
對象,你可以呼叫它的 [[yiibaseModel::validate()|validate()]] 方法觸發資料驗證。如果有資料驗證失敗,將把 [[yiibaseModel::hasErrors|hasErrors]] 屬性設為 ture,想要知道具體發生什麼錯誤就呼叫 [[yiibaseModel::getErrors|getErrors]]。
<?<span>php </span><span>$model</span> = <span>new</span><span> EntryForm(); </span><span>$model</span>->name = 'Qiang'<span>; </span><span>$model</span>->email = 'bad'<span>; </span><span>if</span> (<span>$model</span>-><span>validate()) { </span><span>//</span><span> 验证成功!</span> } <span>else</span><span> { </span><span>//</span><span> 失败! // 使用 $model->getErrors() 获取错误详情</span> }登入後複製
2.建立操作
下面你得在site 控制器中建立一個 entry
操作用於新建的模型。操作的創建和使用已經在說一聲你好小節解釋了。<?<span>php namespace app\controllers; </span><span>use</span><span> Yii; </span><span>use</span><span> yii\web\Controller; </span><span>use</span><span> app\models\EntryForm; </span><span>class</span> SiteController <span>extends</span><span> Controller { </span><span>//</span><span> ...其它代码...</span> <span>public</span> <span>function</span><span> actionEntry() { </span><span>$model</span> = <span>new</span><span> EntryForm; </span><span>if</span> (<span>$model</span>->load(Yii::<span>$app</span>->request->post()) && <span>$model</span>-><span>validate()) { </span><span>//</span><span> 验证 $model 收到的数据 // 做些有意义的事 ...</span> <span>return</span> <span>$this</span>->render('entry-confirm', ['model' => <span>$model</span><span>]); } </span><span>else</span><span> { </span><span>//</span><span> 无论是初始化显示还是数据验证错误</span> <span>return</span> <span>$this</span>->render('entry', ['model' => <span>$model</span><span>]); } } }</span>登入後複製該操作首先建立了一個
EntryForm
物件。然後嘗試從 $_POST蒐集用戶提交的數據,由 Yii 的 [[yiiwebRequest::post()]] 方法負責蒐集。如果模型成功填入資料(也就是說使用者已經提交了 HTML 表單),操作將會呼叫 [[yiibaseModel::validate()|validate()]] 去確保使用者提交的是有效資料。
補充:表達式
Yii::$app代表
應用實例,它是一個全域可存取的單例。同時它也是一個
視圖將會渲染輸出,連同表單一起輸出的還有驗證錯誤的詳細資訊。服務定位器,能提供request,response,db 等等特定功能的組件。在上面的程式碼裡就是使用
request
元件來存取應用程式實例收到的$_POST
資料。使用者提交表單後,操作將會渲染一個名為
entry-confirm
的視圖去確認使用者輸入的資料。如果沒填表單就提交,或資料包含錯誤(譯者:如 email 格式不對),entry
注意:在這個簡單例子裡我們只是呈現了有效數據的確認頁。實務上你應該考慮使用 [[yiiwebController::refresh()|refresh()]] 或 [[yiiwebController::redirect()|redirect()]] 去避免
表單重複提交問題
。3.建立視圖
最後建立兩個視圖檔案entry-confirm 和 entry
。他們會被剛才創建的entry操作渲染。
entry-confirm
視圖簡單地顯示提交的 name 和 email 資料。視圖檔案保存在
views/site/entry-confirm.php。
<?<span>php </span><span>use</span><span> yii\helpers\Html; </span>?> <p>You have entered the following information:</p> <ul> <li><label>Name</label>: <?= Html::encode(<span>$model</span>->name) ?></li> <li><label>Email</label>: <?= Html::encode(<span>$model</span>->email) ?></li> </ul>登入後複製
entry視圖顯示一個 HTML 表單。視圖檔案保存在 views/site/entry.php<?<span>php </span><span>use</span><span> yii\helpers\Html; </span><span>use</span><span> yii\widgets\ActiveForm; </span>?> <?php <span>$form</span> = ActiveForm::begin(); ?> <?= <span>$form</span>->field(<span>$model</span>, 'name') ?> <?= <span>$form</span>->field(<span>$model</span>, 'email') ?> <div <span>class</span>="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::<span>end</span>(); ?>登入後複製
視圖使用了一個功能強大的小部件 [[yiiwidgetsActiveForm|ActiveForm]] 去產生 HTML 表單。其中的 begin()
和 end() 分別用來渲染表單的開始和關閉標籤。在這兩個方法之間使用了 [[yiiwidgetsActiveForm::field()|field()]] 方法去建立輸入框。第一個輸入框用於 “name”,第二個輸入框用於 “email”。之後使用 [[yiihelpersHtml::submitButton()]] 方法產生提交按鈕。<span>use</span><span> yii\helpers\Html; </span><span>use</span> yii\wigets\ActiveForm;登入後複製
記得使用小部件,並需要引進這個兩個
以上就介紹了Yii使用Forms,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。