Yii使用Forms

1.建立模型php

a.加入基類web

     use yii/base/Model數據庫

b.建立類繼承自基類app

c.建立所須要的變量yii

e.定義規則ide

f.注意裏面用[]括起來post

例如:ui

<?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]],該基類一般用來表示數據this

補充:[[yii\base\Model]] 被用於普通模型類的父類並與數據表無關。[[yii\db\ActiveRecord]] 一般是普通模型類的父類但與數據表有關聯(譯註:[[yii\db\ActiveRecord]] 類其實也是繼承自 [[yii\base\Model]],增長了數據庫處理)。spa

EntryForm 類包含 nameemail 兩個公共成員,用來儲存用戶輸入的數據。它還包含一個名爲 rules() 的方法,用來返回數據驗證規則的集合。上面聲明的驗證規則表示:

  • nameemail 值都是必須的
  • 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 表明應用實例,它是一個全局可訪問的單例。同時它也是一個服務定位器,能提供requestresponsedb 等等特定功能的組件。在上面的代碼裏就是使用 request 組件來訪問應用實例收到的 $_POST 數據。

用戶提交表單後,操做將會渲染一個名爲 entry-confirm 的視圖去確認用戶輸入的數據。若是沒填表單就提交,或數據包含錯誤(譯者:如 email 格式不對),entry 視圖將會渲染輸出,連同表單一塊兒輸出的還有驗證錯誤的詳細信息。

注意:在這個簡單例子裏咱們只是呈現了有效數據的確認頁面。實踐中你應該考慮使用 [[yii\web\Controller::refresh()|refresh()]] 或 [[yii\web\Controller::redirect()|redirect()]] 去避免表單重複提交問題

 

3.建立視圖

最後建立兩個視圖文件 entry-confirmentry。他們會被剛纔建立的 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;

          記住使用小部件,須要引入這個兩個

相關文章
相關標籤/搜索