วันพฤหัสบดีที่ 13 มีนาคม พ.ศ. 2557

สอนทำระบบสมัครสมาชิกด้วย Yii Framework ตอนที่ 2 (จบ) บันทึกข้อมูลสมาชิกและอัปโหลดรูปสมาชิก

     ต่อเนื่องจากบทความก่อนหน้านี้ที่ผมได้สอน คือ สอนทำระบบสมัครสมาชิกด้วย Yii Framework ตอนที่ 1 การ Validation Form บทความนี้ผมจะสอนใช้ Yii Framework ทำการเขียนคำสั่งบันทึกข้อมูลของสมาชิกลงฐานข้อมูลกับการเขียนคำสั่งอัปโหลดรูปประจำตัวของสมาชิก ไปเก็บไว้ในโฟลเดอร์สมาชิกที่เราสร้างไว้

1.อันดับแรก เข้าไปเปลี่ยนชื่อไฟล์ users.php ใน โฟลเดอร์ models ให้ชื่อ user.php ออกก่อนครับ เพราะผมเจอปัญหาในส่วนของการเซต Scenario ดังนั้นสรุปได้ว่า การตั้งชื่อ model ไม่ควรมี s ต่อท้ายครับ ให้แก้ไขดังรูป


2.ต่อมาเราไปสร้างโฟลเดอร์สำหรับเก็บรูปของสมาชิกครับ ผมจะสร้างในโฟลเดอร์ images ครับ ตั้งชื่อโฟลเดอร์ว่า users ดังรูป

3.สุดท้าย เราจะเข้าไปที่ controllers ชื่อว่า UsersController.php เราจะแก้ไขคำสั่งเดิมในเมธอดชื่อ actionRegister ให้ใช้คำสั่งดังนี้
public function actionRegister() {
        $model = new User;
          $model->setScenario('register');
        if (isset($_POST['Users'])) {
            $model->attributes = $_POST['Users'];
            $userPicFile = CUploadedFile::getInstance($model, 'user_pic'); //สร้าง Instance ให้กับรูปภาพ โดยเรียกใช้คลาส CUploadedFile ที่ Yii สร้างไว้ให้แล้ว
            if (!empty($userPicFile)) {
                $rnd = date('dmYHis'); //สำหรับใช้เป็นชื่อของรูปภาพและสามารถป้องกันการอัปโหลดภาพชื่อซ้ำกัน
                $pictype = end(explode('.', $userPicFile)); //ตัดให้เหลือแต่นามสกุลไฟล์ เช่น jpg ,png,gif
                $picName = "{$rnd}.{$pictype}"; //เอาชื่อกับนามสกุลไฟล์มาเรียงกันใหม่ จะได้ชื่อไฟล์ที่ไม่ซ้ำกับของคนอื่น สามารถป้องกันการอัปโหลดภาพทับกัน
                $model->user_pic=$picName;//Set ชื่อรูปภาพให้กับตัวแปร user_pic เพื่อบันทึกลงในฐานข้อมูล
                $pathUpload = Yii::app()->basePath . '/../images/users/' . $picName;//กำหนด path สำหรับเก็บไฟล์รูปประจำตัว
                $userPicFile->saveAs($pathUpload);//อัปโหลดรูปประจำตัวของสมาชิกไว้ในพาธ images/users/
            }
            if ($model->save()) {//บันทึกลงฐานข้อมูล
               //เมื่อบันทึกข้อมูลเสร็จจะให้ทำอะไรต่อไป ก็แล้วแต่ปุ๊!!! ส่วนผมจะใช้คำสั่ง redirect ไปยังหน้า index ผมใช้คำสั่ง
               $this->redirect(array('index'));
               //exit(); //จบการทำงาน
            }
        }
        $this->render('register', array('model' => $model));
    }

เท่านี้ก็เสร็จสมบูรณ์แล้วครับ ให้ทดสอบโดยพิมพ์ต่อท้าย URL ว่า  index.php? r=users/register และลองกรอกข้อมูลให้ครบถ้วนแล้วกดปุ่ม Submit ดูครับ ข้อมูลจะต้องถูกเก็บไว้ในเทเบิลชื่อ users และรูปภาพจะเก็บไว้ใน images/users

แล้วพบกันโอกาสหน้าครับ ผมจะพูดถึงเรื่อง การแก้ไข/ลบและแสดงข้อมูลบ้างครับ และสุดท้ายจะสอน Bootstrap ประยุกต์ใช้กับ Yii Frameworkครับ

ไม่มีความคิดเห็น :

แสดงความคิดเห็น