ผมต้องการตรวจสอบการ บันทึกการลงรับหนังสือราชการ โดย เชคจากเลขที่หนังสือ ธุรการต้องการลงรับหนังสือราชการ โดยสามารถค้นหาหนังสือเก่าที่เคยลงรับได้ (อันนี้ได้แล้ว) อีกอันคือ เมื่อธุรการใส่เลขหนังสือเข้าไปแล้ว เมื่อเรากดบันทึกหรือใส่เลขที่หนังสือเข้าไป แล้วมี popup หรืออะไรก็ได้แจ้งเตือนว่า เลขที่หนังสือนี้ได้ลงรับไปแล้ว เช่น
กพ0011.002.2.1/1234 โดยเชคจากเลขหลัง สแลช (/) หรือถ้าเชคกับเลขหนังสือทั้งหมดเลยก็จะดีครับ แต่เลขหลังตัวอักษร จะมีไม่เท่ากันเสมอไป
ขอบคุณครับ
แนะนำให้ใช้ AJAX Validation ครับ
อ. ครับ ยังไม่ค่อยเข้าใจเรื่อง validation อะครับ
ตัวอย่าง มี form ประมาณนี้ พอ user กรอกเลขหนังสือ ตาม format คือ ชื่อย่อ หน่วยงานราชการ แล้วตามด้วยเลขที่หนังสือ (ไม่ต้องเว้นวรรค) ตามด้วย จุด (.) สแลช (/) แล้วตามด้วยเลขหนังสือ เช่น สธ0132.01.001/12345 ประมาณ นี้ครับ แล้วเราจะเขียน validation อย่างไร ให้เชค ตอน user กรอกเลขที่หนังสือ ให้ไปเชคกับตารางในฐานข้อมูล ที่เราสร้างไว้ครับว่า ซ้ำกันหรือเปล่า
ตัวอย่างใน Model ให้เขียน method ในการ Validate
public function rules()
{
return [
//......
[['doc_no'], 'validateDocNo'],
//......
];
}
public function validateDocNo()
{
$doc = Doc::findOne(['doc_no' => $this->doc_no]);
if($doc){
$this->addError('doc_no', 'มีหนังสือเลขที่นี้แล้ว');
}
}
ในฟอร์มให้กำหนด Ajax Validate
<?php
use yii\widgets\ActiveForm;
?>
<?php
$form = ActiveForm::begin([
'enableAjaxValidation' => true, //เปิดการ validate ด้วย AJAX
'enableClientValidation' => false, // validate ฝั่ง client เมื่อ submit หรือ เปลี่ยนค่า
'validateOnChange' => true,// validate เมื่อมีการเปลี่ยนค่า
'validateOnSubmit' => true,// validate เมื่อ submit ข้อมูล
'validateOnBlur' => false,// validate เมื่อเปลี่ยนตำแหน่ง cursor ไป input อื่น
])?>
ใน Controller ให้รับ Ajax Request และ Response ใน actionCreate/Update
$request = Yii::$app->getRequest();
if ($request->isPost && $request->post('ajax') !== null) {
$person->load(Yii::$app->request->post());
Yii::$app->response->format = Response::FORMAT_JSON;
$result = ActiveForm::validate($person);
return $result;
}
ตอบ/อธิบาย