Kotchasan PHP Framework

เริ่มต้นใช้งานเฟรมเวิร์ค

หลังจากที่เราติดตั้งคชสารเว็บเฟรมเวิร์คเรียบร้อยแล้ว เราจะมาเริ่มต้นสร้างแอพพลิเคชั่นกัน ซึ่งคชสารมีแอพพลิเคชั่นอย่างง่ายติดตั้งไว้ที่ไดเร็คทอรี่ projects/ สามารถไปศึกษาประกอบได้

องค์ประกอบแรกที่ทุกแอพพลิเคชั่นต้องมีก็คือหน้าแรกของเว็บไซต์ หรือ index.php นั่นเอง ซึ่งไฟล์นี้จะเป็นจุดเริ่มต้นทั้งหมดของแอพพลิเคชั่น การเรียกใช้งานคชสารจะต้องผ่านไฟล์นี้ก่อนทั้งสิ้น
// โหลดคชสาร
include 'Kotchasan/load.php';
// เริ่มต้นใช้งานคชสาร
$app = Kotchasan::createWebApplication();
// รันแอพพลิเคชั่น
$app->run();

โค้ดหลักๆของ คชสารจะมีประมาณด้านบน

ก่อนการใช้งานคชสารก็ต้องมีการเตรียมไฟล์สำหรับเริ่มต้นการใช้งานคชสารกันก่อน โดยการ include 'Kotchasan/load.php'; เข้าไปในแอพพลิคั่น ซึ่งที่ไฟล์นี้คชสารจะทำการโหลดส่วนประกอบที่จำเป็นเตรียมไว้ให้

ถัดมาเป็นคำสั่งเริ่มต้นใช้งานแอพพลิเคชั่น $app = Kotchasan::createWebApplication();  คำสั่งนี้จะสั่งให้คชสารโหลดแอพพลิเคชั่นและสร้าง instance ของแอพพลิเคชั่นขึ้นมา ซึ่งเมธอด createWebApplication จะมีพารามิเตอร์ 1 ตัวคือ $cfg สำหรับระบุค่ากำหนดของแอพพลิเคชั่นที่ต้องการ ซึ่งหากไม่มีการระบุพารามิเตอร์มา คชสารจะใช้ค่ากำหนดเริ่มต้นของคชสารที่ \Kotchasan\Config แทน ตัวอย่าง
$app = Kotchasan::createWebApplication(Gcms\Config::create());

หมายความว่า แอพพลิเคชั่นจะมีการใช้ค่ากำหนดจาก Gcms\Config ในการทำงาน ซึ่ง Gcms\Config เองก็ต้องสืบทอด (inherit) มาจาก Kotchasan\Config อีกทีเช่นกัน

ในการเรียกใช้งานคชสารจะมีตัวแปรเริ่มต้น 2 ตัวที่เกี่ยวข้องคือ
Kotchasan::$defaultController ซึ่งค่าเริ่มต้นคือ Index\Index\Controller ซึ่งหมายความว่าเมื่อสั่งรันแอพพลิเคชั่นแล้วไฟล์ Controller หลักที่จะถูกเรียกใช้งานก็คือ Index\Index\Controller นั่นเอง และเมธอดปริยายที่จะถูกเรียกใช้ก็คือเมธอด index หากเราต้องการให้คชสารทำการเรียกไปยังคอนโทรเลอร์อื่น สามารถทำได้โดยการระบุคอนโทรลเลอร์ที่ต้องก่อนการเรียกใช้คำสั่ง run()
$app = Kotchasan::createWebApplication();
$app->defaultController = 'Index\Export\Controller';
$app->run()

ซึ่งหมายความว่าเมื่อสั่ง run() แล้วคชสารจะเรียกไปยัง Index\Export\Controller::index() แทน

คชสารมีการกำหนดรูปแบบพารามิเตอร์ของ URL ไว้ให้เรียกใช้งานได้ทันทีอยู่แล้ว ซึ่งจะถูกกำหนดโดย Router ของคชสาร ซึ่ง Router ของคชสารมีความสามารถเริ่มต้นในการแยก URL สำหรับเว็บไซต์พื้นฐานทั่วไปอย่างพอเพียง (ผมออกแบบ Router โดยคำนึงถึงความปลอดภัยเป็นหลักโดยมุ่งเน้นไปที่ URL เฉพาะตามรูปแบบพื้นฐานของ GCMS เท่านั้น) แต่หาก URL ที่ได้ไม่เหมาะสมสำหรับแอพพลิคั่นที่ต้องการก็สามารถกำหนดกฏของ Router ใหม่ได้โดยการสืบทอดคลาส Router จาก Kotchasan\Router เป็นคลาสใหม่ แล้วทำการกำหนดให้คชสารรู้จัก Router ใหม่ก่อนการเรียกคำสั่ง run() 
$app = Kotchasan::createWebApplication();
$app->defaultRouter = 'Gcms\Router';
$app->run()

ตัวอย่างการกำหนดกฏของ Router ใหม่
namespace Gcms;

class Router extends \Kotchasan\Router
{
  /**
   * กฏของ Router สำหรับการแยกหน้าเว็บไซต์
   *
   * @var array
   */

  protected $rules = array(
    // index.php/Widgets/Textlink/Models/Write/save
    '/^[a-z0-9]+\.php\/(Widgets\/[a-z]+\/Models\/[a-z]+)\/([a-z]+)$/i' => array('_class', '_method'),
    // index.php/module/model/folder/_dir/_method
    '/^[a-z0-9]+\.php\/([a-z]+)\/(model)(\/([\/a-z0-9_]+)\/([a-z]+))?$/i' => array('module', '_mvc', '', '_dir', '_method'),
    // css, js
    '/(css|js)\/(view)\/(index)/i' => array('module', '_mvc', '_dir'),
    // antispam image
    '/(index)\/(view)\/(antispam)/i' => array('module', '_mvc', '_dir'),
    // install
    '/index\.php\/(index)\/(controller)\/(installing)/i' => array('module', '_mvc', '_dir'),
    // module/cat/id
    '/^([a-z]+)\/([0-9]+)\/([0-9]+)$/' => array('module', 'cat', 'id'),
    // module/cat module/alias, module/cat/alias
    '/^([a-z]+)(\/([0-9]+))?(\/(.*))?$/' => array('module', '', 'cat', '', 'alias'),
    // module, module.php
    '/^([a-z0-9_]+)(\.php)?$/' => array('module'),
    // alias
    '/^(.*)$/' => array('alias')
  );
}

การกำหนดกฏของ Router จะทำที่ตัวแปร $rules ซึ่งหากต้องการแก้ไขกฏใดๆจะต้องนำกฏเก่าทั้งชุดมาแก้ไขด้วย เนื่องจากกฏเดิมที่ถูกสืบทอดมาแล้วจะไม่มีการนำกลับมาใช้อีก

นอกจากนี้เรายังสามารถกำหนดไฟล์เริ่มต้นของคชสารเป็นไฟล์อื่นๆ ได้อีก โดยการกำหนดร่วมกับคอนโทรลเลอร์ที่ต้องการเพื่อแยกการทำงานของแต่ละไฟล์ออกจากกัน เช่น index.php ใช้คอนโทรลเลอร์หลัก และ print.php ให้เรียกไปยัง Index\Export\Controller สำหรับเขียนคำสั่งเพื่อสั่งพิมพ์หน้าเป็นต้น (หมายเหตุ ไม่สามารถใช้ Print เป็นชื่อคลาสได้เนื่องจากเป็นชื่อสงวน)