Yii - การตรวจสอบความถูกต้อง

คุณไม่ควรเชื่อถือข้อมูลที่ได้รับจากผู้ใช้ ในการตรวจสอบโมเดลด้วยอินพุตของผู้ใช้คุณควรโทรyii\base\Model::validate()วิธี. จะส่งคืนค่าบูลีนหากการตรวจสอบความถูกต้องสำเร็จ หากมีข้อผิดพลาดคุณอาจได้รับจากไฟล์yii\base\Model::$errors ทรัพย์สิน.

การใช้กฎ

เพื่อให้ validate() ฟังก์ชันทำงานคุณควรแทนที่ไฟล์ yii\base\Model::rules() วิธี.

Step 1 - rules() วิธีการส่งคืนอาร์เรย์ในรูปแบบต่อไปนี้

[
   // required, specifies which attributes should be validated
   ['attr1', 'attr2', ...],
   // required, specifies the type a rule.
   'type_of_rule',
   // optional, defines in which scenario(s) this rule should be applied
   'on' => ['scenario1', 'scenario2', ...],
   // optional, defines additional configurations
   'property' => 'value', ...
]

สำหรับแต่ละกฎคุณควรกำหนดแอตทริบิวต์ที่ใช้กับกฎเป็นอย่างน้อยและประเภทของกฎที่ใช้

กฎการตรวจสอบหลักคือ - boolean, captcha, compare, date, default, double, each, email, exist, file, filter, image, ip, in, integer, match, number, required, safe, string, trim, unique, url.

Step 2 - สร้างโมเดลใหม่ในไฟล์ models โฟลเดอร์

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password; public $email;
      public $country; public $city;
      public $phone;
      public function rules() {
         return [
            // the username, password, email, country, city, and phone attributes are
            //required
            [['username' ,'password', 'email', 'country', 'city', 'phone'], 'required'],
            // the email attribute should be a valid email address
            ['email', 'email'],
         ];
      }
   }
?>

เราได้ประกาศรุ่นสำหรับแบบฟอร์มลงทะเบียนแล้ว โมเดลนี้มีคุณสมบัติ 5 ประการ ได้แก่ ชื่อผู้ใช้รหัสผ่านอีเมลประเทศเมืองและโทรศัพท์ จำเป็นต้องใช้ทั้งหมดและคุณสมบัติอีเมลต้องเป็นที่อยู่อีเมลที่ถูกต้อง

Step 3 - เพิ่มไฟล์ actionRegistration วิธีการ SiteController ที่เราสร้างไฟล์ RegistrationForm จำลองและส่งต่อไปยังมุมมอง

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

Step 4- เพิ่มมุมมองสำหรับแบบฟอร์มการลงทะเบียนของเรา ภายในโฟลเดอร์ views / site ให้สร้างไฟล์ชื่อ register.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, 'country') ?> <?= $form->field($model, 'city') ?> <?= $form->field($model, 'phone') ?>
         <div class = "form-group">
            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary',
               'name' => 'registration-button']) ?>
         </div>
      <?php ActiveForm::end(); ?>
   </div>
</div>

เรากำลังใช้ไฟล์ ActiveForm วิดเจ็ตสำหรับแสดงแบบฟอร์มการลงทะเบียนของเรา

Step 5 - หากคุณไปที่โฮสต์ในพื้นที่ http://localhost:8080/index.php?r=site/registration และคลิกปุ่มส่งคุณจะเห็นกฎการตรวจสอบความถูกต้องในการดำเนินการ

Step 6 - ในการปรับแต่งข้อความแสดงข้อผิดพลาดสำหรับไฟล์ username คุณสมบัติแก้ไขไฟล์ rules() วิธีการของ RegistrationForm ด้วยวิธีต่อไปนี้

public function rules() {
   return [
      // the username, password, email, country, city, and phone attributes are required
      [['password', 'email', 'country', 'city', 'phone'], 'required'],
      ['username', 'required', 'message' => 'Username is required'],
      // the email attribute should be a valid email address
      ['email', 'email'],
   ];
}

Step 7 - ไปที่โฮสต์ในพื้นที่ http://localhost:8080/index.php?r=site/registrationแล้วคลิกปุ่มส่ง คุณจะสังเกตเห็นว่าข้อความแสดงข้อผิดพลาดของคุณสมบัติชื่อผู้ใช้มีการเปลี่ยนแปลง

Step 8 - ในการปรับแต่งกระบวนการตรวจสอบคุณสามารถแทนที่วิธีการเหล่านี้ได้

  • yii \ base \ Model :: beforeValidate (): ทริกเกอร์ a

    yii \ base \ Model :: เหตุการณ์ EVENT_BEFORE_VALIDATE

  • yii \ base \ Model :: afterValidate (): ทริกเกอร์ a

    yii \ base \ Model :: เหตุการณ์ EVENT_AFTER_VALIDATE

Step 9 - ในการตัดแต่งช่องว่างรอบ ๆ ทรัพย์สินของประเทศและเปลี่ยนอินพุตที่ว่างเปล่าของคุณสมบัติของเมืองให้เป็นค่าว่างคุณสามารถ trim และ default ผู้ตรวจสอบความถูกต้อง

public function rules() {
   return [
      // the username, password, email, country, city, and phone attributes are required
      [['password', 'email', 'country', 'city', 'phone'], 'required'],
      ['username', 'required', 'message' => 'Username is required'],
      ['country', 'trim'], ['city', 'default'],
      // the email attribute should be a valid email address
      ['email', 'email'],
   ];
}

Step 10 - หากอินพุตว่างคุณสามารถตั้งค่าเริ่มต้นได้

public function rules() {
   return [
      ['city', 'default', 'value' => 'Paris'],
   ];
}

หากคุณสมบัติของเมืองว่างเปล่าระบบจะใช้ค่า "ปารีส" เริ่มต้น