@FordAntiTrust

ความคืบหน้า PHP Hoffman Framework (5)

จาก ความคืบหน้า PHP Hoffman Framework (4) ตัวความสัมพันธ์ระหว่าง model กับ controller นั้น เพิ่มเติมและปรับเปลี่ยนเพื่อความเหมาะสม โดยถ้าเราจะกำหนด controller ต้องมี namespace หรือ prefix-name (ต่อไปจะเรียกว่า namespace อย่างเดียวครับ) ด้านหน้าเสียก่อน คือ

class controller_<ชื่อ controller> extends Hmf_FlowController {
....
}

โดยให้ extends มาจาก FlowController ครับ

ส่วนของ model ก็เช่นกันครับ

class model_<ชื่อ model> extends Hmf_LogicModel {
    function __construct(){
        parent::__construct();
    }
    ....
}

(อันนี้คือ model แบบมาตรฐาน)

แต่เวลาเรียกเอา model มาใช้ใน FlowController ก็ใช้ method ‘getInstantModel’ ของ FlowController ครับ โดยใส่ชื่อ model ลงไป และเดี่ยวมันจะเติม namespace ให้เอง แบบนี้ครับ

class model_user extends Hmf_LogicModel {
    function __construct(){
        parent::__construct();
    }
    ....
}

class controller_user extends Hmf_FlowController {
    function list($page = 1){

        $user = $this->getInstantModel('user');

        $out['data'] = $user->pagination($page, 5);
        $out['pagenav'] = $user->paginationLink(HttpPage::url('user','list'));

        return $out;

    }
}

แต่ถ้า model_user ไม่มี หรือไม่ได้สร้าง class ไว้ ตัว getInstantModel มันจะไปสร้าง Instant ของ class ของ model นั้นแล้วให้ตัวมันมีคุณสมบัติแบบเดียวกับ class ของ model แบบมาตรฐานด้านบนนั้นแหละครับ พูดง่าย ๆ ก็คือถ้าหาไม่เจอ ก็สร้างให้เลย ส่วนใช้งานได้หรือไม่อีกเรื่องครับ โดย class ของ model แบบมาตรฐานมีคุณสมบติแบบเดียวกับ LogicModel เลยครับ

class controller_user extends Hmf_FlowController {
    function list($page = 1){

        $user = $this->getInstantModel('user');

        $out['data'] = $user->pagination($page, 5);
        $out['pagenav'] = $user->paginationLink(HttpPage::url('user','list'));

        return $out;

    }
}

โดยตัวอย่างด้านบน ถ้าไม่มี model_user ก็ใช้งานได้เหมือนกันครับ ซึ่งสะดวกมากในกรณีที่ใช้ class มาตรฐานทั่วไปครับผม

Exit mobile version