Kotchasan PHP Framework

ตัวอย่างการรวมโปรเจ็ค eBorrow และ Inventory เข้าด้วยกัน


ในตัวอย่างนี้เป็นตัวอย่างการรวมโปรเจ็คยอดนิยมสองโปรเจ็คเข้าด้วยกัน ซึ่งก็คือโปรแกรม ยืม-คืน (eBorrow) เข้ากับโปรแกรม Inventory ซึ่งทั้งสองโปรแกรมมีการใช้งานโมดูลร่วมกันคือ Inventory (คลังสินค้า) ซึ่งเป็นการรวมโปรแกรมที่สร้างจาก Web Framework อีกทีซึ่งการรวมจะง่ายขึ้นอีก
หลักในการรวมโปรแกรม คือเราจะย้ายโค้ดทั้งหมดจากโปรแกรมหนึ่งไปใส่อีกโปรแกรม จุดยุ่งยากจริงๆ ก็จะเป็นโค้ดตรงส่วนที่มีการใช้งานเหมือนๆกัน ซึ่งอาจจะต้องตัดสินใจเก็บโค้ดของโปรแกรมหนึ่งโปรแกรมใดไว้โดยต้องดูจากการทำงานของโค้ดในส่วนนั้นและการทำงานของโปรแกรม เพื่อไม่ให้เกิดปัญหาขัดแย้งกัน ส่วนกรณีของโค้ดที่ไม่ขัดแย้งกันก็สามารถรวมกันตรงๆได้เลย

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

คำแนะนำเพิ่มเติม
จุดที่มีโอกาสผิดพลาดได้ง่ายจะมีอยู่ 2 จุดหลักๆ คือโค้ดในส่วนของฐานข้อมูล และ ภาษา ซึ่งจริงๆ อาจเลือกใช้วิธีติดตั้งโปรเจ็คทั้งสองแยกกันไปก่อน จากนั้นค่อยแก้ไขฐานข้อมูลให้ตรงกัน แล้วจากนั้นค่อยย้ายไฟล์ภาษาไป Import ยังโปรแกรมตัวที่จะเก็บไว้ก็ได้ ซึ่งถ้าทั้งฐานข้อมูลและไฟล์ภาษาของทั้งสองโปรเจ็คถูกต้องแล้ว ฐานข้อมูลจะต้องสามารถใช้งานร่วมกันได้ทั้ง 2 โปรเจ็คโดยที่ยังไม่ต้องรวมไฟล์ (สามารถตั้งค่าฐานข้อมูลไปใช้อันเดียวกันได้เลย โดยจะต้องแก้ไขไฟล์ config.php และ database.php ให้รายละเอียดของไฟล์ชี้ไปที่เดียวกันด้วย โดยยึดเอาไฟล์ config ของโปรแกรมที่จะเก็บฐานข้อมูลไว้เป็นหลัก) หากเรียบร้อยดี สามารถข้ามกระบวนการรวมไฟล์ในส่วนของโฟลเดอร์ install/ และ language/ ได้ ซึ่งวิธีนี้จะทำให้การทดสอบเพื่อแก้ไขข้อขัดแย้งกันง่ายขึ้น

หมายเหตุ ไฟล์ config ของโปรแกรมจะสัมพันธ์กับฐานข้อมูลสมาชิกที่ใช้งานอยู่ จะต้องใช้ไฟล์และฐานข้อมูลจากโปรแกรมเดียวกันเท่านั้น
 

หัวข้อพิเศษ การรวมโปรแกรม Booking กับ Car Reservation เข้าด้วยกัน

โดยหลักกการแล้วการรวมโปรเจ็คทุกๆโปรเจ็คจะมีวิธีการที่ไม่แตกต่างกัน แต่เนื่องจากโปรแกรม Booking และ Car Reservation มีจุดแตกต่างที่สำคัญอยู่จุดหนึ่งคือ โปรแกรม Booking จะมีส่วนของหน้าเว็บที่ไม่ต้อง Login ในขณะที่ Car Reservation จะต้องเข้าระบบก่อนใช้งานเสมอ ทำให้โมดูล index ของทั้งสองโปรแกรมจะแตกต่างกันเล็กน้อย

จุดที่แตกต่างกันคือ Controller ของหน้า Home ของ Booking ไม่มีการตรวจสอบการ Login  ในขณะที่ของ Car Reservation มีการตรวจสอบในส่วนนี้

ก่อนอื่นผมขออธิบายหน้าที่ของ Controller ของ Web Framework ก่อน
Controller จะเป็นด่านแรกเมื่อมีการเรียกหน้าเว็บใดๆเข้ามา (Controller ที่จะถูกเรียกใช้ สัมพันธ์กับ URL ที่เรียกมาที่ module) Controller จะมีหน้าที่หลักในการตรวจสอบสิทธิ์ในการเข้าถึงหน้าเว็บนั้นๆ ตลอดจนตรวจสอบความถูกต้องของข้อมูลที่ส่งมา (เช่น ID ที่ต้องการ) รวมถึงการจัดเตรียมการแสดงผล title breadcrumbs ต่างๆที่จะแสดงทางหน้าเว็บ ก่อนที่จะไปเรียก View ที่สัมพันธ์กันเพื่อแสดงผลเนื้อหาของหน้า (เช่น ตาราง หรือ ฟอร์ม)

แน่นอนครับ ว่าถ้าเรามีการกำหนดให้มีการตรวจสอบสิทธ์ในหน้านี้ การเรียกหน้าเว็บนั้นๆก็ต้องผ่านการ Login มาก่อนแล้ว
// สมาชิก
$login = Login::isMember();
// สำหรับตรวจสอบว่าเว็บไซต์ต้องเข้าระบบก่อนเสมอ (dashboard)
if ($login) {
     // การทำงานของ Controller ที่นี่ หาก Login แล้ว
     ...............
     ...............
}
// 404 ยังไม่ได้เข้าระบบ (หรือไม่มีสิทธิ์ดูหน้านี้)
\Index\Error\Controller::execute($this, $request->getUri());

โค้ดด้านบนจะเป็นส่วนในการตรวจสอบการเข้าระบบของโปรแกรม Car Reservation ซึ่งโปรแกรม Booking จะไม่มีโค้ดในส่วนนี้ ดังนั้นถ้าต้องการเลือกแบบใดให้เก็บโค้ดของหน้าเว็บนั้นๆไว้