Yii - HTML 表單



當表單基於模型時,在 Yii 中建立此表單的常用方法是透過yii\widgets\ActiveForm 類。在大多數情況下,表單都有一個對應的模型用於資料驗證。如果模型表示來自資料庫的資料,則模型應該繼承自ActiveRecord 類。如果模型捕獲任意輸入,則它應該繼承自yii\base\Model 類。

讓我們建立一個登錄檔單。

步驟 1 - 在models 資料夾中,建立一個名為RegistrationForm.php 的檔案,內容如下。

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password;
      public $email;
      public $subscriptions;
      public $photos;
      /**
      * @return array customized attribute labels
      */
      public function attributeLabels() {
         return [
            'username' => 'Username',
            'password' => 'Password',
            'email' => 'Email',
            'subscriptions' => 'Subscriptions',
            'photos' => 'Photos',
         ];
      }
   }
?>

我們為登錄檔單聲明瞭一個模型,包含五個屬性 - 使用者名稱、密碼、電子郵件、訂閱和照片。

步驟 2 - 要顯示此表單,請將actionRegistration 方法新增到SiteController

public function actionRegistration() {
   $mRegistration = new RegistrationForm();
   return $this->render('registration', ['model' => $mRegistration]);
}

我們建立RegistrationForm 的例項並將其傳遞給註冊檢視。現在,是時候建立一個檢視了。

步驟 3 - 在 views/site 資料夾中,新增一個名為registration.php 的檔案,內容如下。

<?php
   use yii\bootstrap\ActiveForm;
   use yii\bootstrap\Html;
?>
<div class = "row">
   <div class = "col-lg-5">
      <?php $form = ActiveForm::begin(['id' => 'registration-form']); ?>
      <?= $form->field($model, 'username') ?>
      <?= $form->field($model, 'password')->passwordInput() ?>
      <?= $form->field($model, 'email')->input('email') ?>
      <?= $form->field($model, 'photos[]')->fileInput(['multiple'=>'multiple']) ?>
      <?= $form->field($model, 'subscriptions[]')->checkboxList(['a' => 'Item A',
         'b' => 'Item B', 'c' => 'Item C']) ?>
      <div class = "form-group">
         <?= Html::submitButton('Submit', ['class' => 'btn btn-primary',
            'name' => 'registration-button']) ?>
      </div>
      <?php ActiveForm::end(); ?>
   </div>
</div>

我們觀察到以下幾點:

  • ActiveForm::begin() 函式標記表單的開始。ActiveForm::begin()ActiveForm::end() 函式之間的所有程式碼都將包含在form 標籤內。

  • 要在表單中建立一個欄位,應呼叫ActiveForm::field() 方法。它會自動建立所有輸入和標籤標籤。輸入名稱會自動確定。

  • 例如,password 屬性將是RegistrationForm[password]。如果要使屬性採用陣列,則應在屬性名稱後附加 [ ]。

步驟 4 - 如果您轉到 Web 瀏覽器的位址列並輸入https://:8080/index.php?r=site/registration,您將看到我們的表單。

Registration
廣告
© . All rights reserved.