จาก ความคืบหน้า 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 มาตรฐานทั่วไปครับผม