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'],
];
}
หากคุณสมบัติของเมืองว่างเปล่าระบบจะใช้ค่า "ปารีส" เริ่มต้น