ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

สังคมนักพัฒนาระบบ (Community) Yii2 MaskedInput Yii2

หาวิธีตรวจสอบเลขหนังสือราชการ โดยใช้ MaskedInput Yii2

ผมต้องการตรวจสอบการ บันทึกการลงรับหนังสือราชการ โดย เชคจากเลขที่หนังสือ ธุรการต้องการลงรับหนังสือราชการ โดยสามารถค้นหาหนังสือเก่าที่เคยลงรับได้ (อันนี้ได้แล้ว) อีกอันคือ เมื่อธุรการใส่เลขหนังสือเข้าไปแล้ว เมื่อเรากดบันทึกหรือใส่เลขที่หนังสือเข้าไป แล้วมี popup หรืออะไรก็ได้แจ้งเตือนว่า เลขที่หนังสือนี้ได้ลงรับไปแล้ว เช่น

กพ0011.002.2.1/1234 โดยเชคจากเลขหลัง สแลช (/) หรือถ้าเชคกับเลขหนังสือทั้งหมดเลยก็จะดีครับ แต่เลขหลังตัวอักษร จะมีไม่เท่ากันเสมอไป
ขอบคุณครับ

0 คะแนน

5 คำตอบ

0
กัมปนาท บุตรจันทร์ Lv.1 Hello World ตอบ

อ. ครับ ยังไม่ค่อยเข้าใจเรื่อง validation อะครับ
ตัวอย่าง มี form ประมาณนี้ พอ user กรอกเลขหนังสือ ตาม format คือ ชื่อย่อ หน่วยงานราชการ แล้วตามด้วยเลขที่หนังสือ (ไม่ต้องเว้นวรรค) ตามด้วย จุด (.) สแลช (/) แล้วตามด้วยเลขหนังสือ เช่น สธ0132.01.001/12345 ประมาณ นี้ครับ แล้วเราจะเขียน validation อย่างไร ให้เชค ตอน user กรอกเลขที่หนังสือ ให้ไปเชคกับตารางในฐานข้อมูล ที่เราสร้างไว้ครับว่า ซ้ำกันหรือเปล่า

 

0
มานพ กองอุ่น Lv.1 Hello World ตอบ

ตัวอย่างใน 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;
        }

 

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก