Kotchasan PHP Framework

[ตอนที่ 4] เวิร์คช้อป CMS อย่างง่าย เก็บข้อมูลเป็นไฟล์

ถึงตอนนี้ส่วนแอดมินก็พร้อมจะทำงานแล้ว ไฟล์แรกที่คชสารจะเรียกใช้ก็คือ defaultController เหมือนเดิม (Index\Index\Controller) แต่เนื่องจากแอพพลิเคชั่นนี้อยู่ภายใต้ไดเร็คทอรี่ admin/ มันจึงเรียกไปยัง admin/modules/index/controllers/index.php แทน ซึ่งจะเป็นคนละไฟล์กันกับไดเร็คทอรี่หลักนะครับ
หมายเหตุ ถ้าคชสารไม่พบไฟล์ที่ต้องการภายใต้ไดเร็คทอรี่แอพพลิเคชั่นของตัวเอง มันจะไปค้นหาไฟล์จากแอพพลิเคชั่นหลักในลำดับถัดไป
namespace Index\Index;

use \Kotchasan\Http\Request;
use \Kotchasan\Login;
use \Kotchasan\Template;

class Controller extends \Kotchasan\Controller
{

  public function index(Request $request)
  {
    // เริ่มต้นใช้งาน session
    $request->initSession();
    // ตรวจสอบการ login
    Login::create();
    // กำหนด skin ให้กับ template
    Template::init('admin');
    // backend
    $view = new \Kotchasan\View;
    if ($login = Login::isMember()) {
      // Controller หลัก
      $main = \Index\Main\Controller::init($request);
      // class สำหรับ body (index.html)
      $bodyclass = 'mainpage';
    } else {
      // Controller หน้า login
      $main = \Index\Login\Controller::init($request);
      // class สำหรับ body (index.html)
      $bodyclass = 'loginpage';
    }
    // เนื้อหา
    $view->setContents(array(
      // main template
      '/{MAIN}/' => $main->detail,
      // title
      '/{TITLE}/' => $main->title,
      // class สำหรับ body (index.html)
      '/{BODYCLASS}/' => $bodyclass
    ));
    if ($login) {
      $view->setContents(array(
        // แสดงชื่อคน Login
        '/{LOGINNAME}/' => $login['username'],
        // แสดงเมนู
        '/{TOPMENU}/' => \Kotchasan\Menu::render(\Index\Menu\Model::get(), $main->module)
      ));
    }
    // ส่งออก เป็น HTML
    echo $view->renderHTML();
  }
}

ผมจะแบ่งอธิบายเป็นส่วนๆนะครับ
// เริ่มต้นใช้งาน session
$request->initSession();
// ตรวจสอบการ login
Login::create();

แอพพลิเคชั่นนี้มีการตรวจสอบการ Login ด้วย ดังนั้นสิ่งแรกที่ต้องทำคือต้องมีการเรียกใช้งาน session ก่อน ด้วย $request->initSession(); หลังจากนั้นถึงจะทำการตรวจสอบการ Login ด้วยคำสั่ง Login::create();
คำสั่ง Login::create(); จะทำการตรวจสอบข้อมูลการ Login กับข้อมูลจากไฟล์ settings/config.php
/* config.php */
return array(
  'username' => 'admin',
  'password' => 'admin'
);

ถ้าถูกต้องจะมีการสร้าง session ขึ้นมาเก็บข้อมูลการเข้าระบบคือ $_SESSION['login']
// กำหนด skin ให้กับ template
Template::init('admin');

โค้ดลำดับถัดมา จะเป็นการกำหนดค่า Template ซึ่งจากโค้ดจะเห็นว่ามีการกำหนดค่าให้ใช้ Template ชื่อ admin
if ($login = Login::isMember()) {
  // Controller หลัก
  $main = \Index\Main\Controller::init($request);
  // class สำหรับ body (index.html)
  $bodyclass = 'mainpage';
} else {
  // Controller หน้า login
  $main = \Index\Login\Controller::init($request);
  // class สำหรับ body (index.html)
  $bodyclass = 'loginpage';
}

โค้ดด้านบน จะทำการตรวจสอบว่าสามารถ Login ได้สำเร็จหรือไม่ ถ้าสำเร็จจะไปเรียกคอนโทรลเลอร์หลักอีกตัวคือ Index\Main\Controller มาทำงาน แต่ถ้ายังไมได้ Login จะไปเรียก Index\Login\Controller มาทำงานแทน
สำหรับโค้ดส่วนที่เหลือ จะเป็นการนำข้อมูลที่ได้ไปแสดงผลด้วย View ตามปกติ