[ตอนที่ 5] เวิร์คช้อป CMS อย่างง่าย เก็บข้อมูลเป็นไฟล์
ในตอนนี้เราจะมาสำรวจโค้ดของ Index\LoginController และ Index\Main\Controller ซึ่งจะถูกเรียกในลำดับถัดมา
เรามาดูโค้ดของ Index\Login\Controller กันก่อน ไฟล์นี้ไม่ได้ทำอะไรมากแค่ทำหน้าที่โหลดฟอร์ม login (login.html) มาแสดงผลเท่านั้น
คำสั่งที่น่าสนใจสำหรับหน้านี้คือ
สำหรับโค้ดฟอร์ม ก็คือไฟล์ admin/skin/admin/login.html ซึ่งก็เป็นโค้ดฟอร์มทั่วๆไปเท่านั้น (การจัดวางโค้ดตลอดจนคลาสต่างๆ ของ input แต่ละตัวเป็นไปตามข้อกำหนดของ GCSS)
สำหรับในส่วนของ Index\Main\Controller ก็จะมีการทำงานเหมือนในโปรเจ็คก่อนหน้า คือ รับค่า module มาตรวจสอบว่ามีไฟล์ที่ต้องการหรือไม่ ถ้ามีก็ไปโหลดไฟล์นั้นๆมาแสดง ซึ่งผมจะไม่อธิบายซ้ำในส่วนนี้นะครับ
เรามาดูโค้ดของ Index\Login\Controller กันก่อน ไฟล์นี้ไม่ได้ทำอะไรมากแค่ทำหน้าที่โหลดฟอร์ม login (login.html) มาแสดงผลเท่านั้น
namespace Index\Login;
use \Kotchasan\Http\Request;
use \Kotchasan\Login;
use \Kotchasan\Template;
class Controller extends \Kotchasan\Controller
{
public static function init(Request $request)
{
// template
$template = Template::create('', '', 'login');
$template->add(array(
'/410aa3847b41e1062da13b28dd01f7b1/' => $request->createToken(),
'/{EMAIL}/' => Login::$text_username,
'/{PASSWORD}/' => Login::$text_password,
'/{MESSAGE}/' => Login::$login_message,
'/{CLASS}/' => empty(Login::$login_message) ? 'hidden' : (empty(Login::$login_input) ? 'message' : 'error')
));
// คืนค่าข้อมูลโมดูล
return (object)array(
'module' => 'login',
'title' => self::$cfg->web_title,
'detail' => $template->render()
);
}
}
คำสั่งที่น่าสนใจสำหรับหน้านี้คือ
- $request->createToken() จะทำหน้าที่ในการสร้างรหัสสำหรับส่งไปพร้อมกับฟอร์ม ซึ่งเราสามารใช้รหัสนี้ในการตรวจสอบว่าข้อมูลที่ส่งมา มาจากฟอร์มของเราหรือไม่ (ป้องกันการ brute force) รหัสนี้ เมื่อใช้แล้วจะต้องมีการเขียนโค้ดเพื่อทำลายทิ้งด้วย
- Login::$text_username, Login::$text_password และ Login::$login_message เป็นตัวแปรที่ได้จากการการตรวจสอบการเข้าระบบ ซึ่งข้อผิดพลาดจากการเข้าระบบจะถูกเก็บไว้ในตัวแปร Login::$login_message
สำหรับโค้ดฟอร์ม ก็คือไฟล์ admin/skin/admin/login.html ซึ่งก็เป็นโค้ดฟอร์มทั่วๆไปเท่านั้น (การจัดวางโค้ดตลอดจนคลาสต่างๆ ของ input แต่ละตัวเป็นไปตามข้อกำหนดของ GCSS)
สำหรับในส่วนของ Index\Main\Controller ก็จะมีการทำงานเหมือนในโปรเจ็คก่อนหน้า คือ รับค่า module มาตรวจสอบว่ามีไฟล์ที่ต้องการหรือไม่ ถ้ามีก็ไปโหลดไฟล์นั้นๆมาแสดง ซึ่งผมจะไม่อธิบายซ้ำในส่วนนี้นะครับ