首頁  >  文章  >  後端開發  >  Yii使用Forms

Yii使用Forms

WBOY
WBOY原創
2016-08-08 09:33:00751瀏覽

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() 的方法,用來傳回資料驗證規則的集合。上面聲明的驗證規則表示: nameemail 值都是必須的

  • email 的值必須滿足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 代表

    應用

    實例,它是一個全域可存取的單例。同時它也是一個服務定位器,能提供requestresponsedb 等等特定功能的組件。在上面的程式碼裡就是使用 request 元件來存取應用程式實例收到的 $_POST 資料。 使用者提交表單後,操作將會渲染一個名為 entry-confirm 的視圖去確認使用者輸入的資料。如果沒填表單就提交,或資料包含錯誤(譯者:如 email 格式不對),entry

    視圖將會渲染輸出,連同表單一起輸出的還有驗證錯誤的詳細資訊。

    注意:在這個簡單例子裡我們只是呈現了有效數據的確認頁。實務上你應該考慮使用 [[yiiwebController::refresh()|refresh()]] 或 [[yiiwebController::redirect()|redirect()]] 去避免表單重複提交問題

    3.建立視圖
    最後建立兩個視圖檔案

    entry-confirmentry

    。他們會被剛才創建的
    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教學有興趣的朋友有幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn