อยากได้โค้ดตัวอย่าง CRUD อย่างเรียบง่าย

สวัสดีครับ
คือผมอยากได้โค้ดตัวอย่าง CRUD (create, read, update, delete) อย่างเรียบง่าย แล้วนำข้อมูลไปแสดงผลเป็นตาราง HTML ธรรมดา พอดีได้ลองศึกษาทำเองแล้ว (แบบมั่วๆ) ไม่รู้ว่ามีความถูกต้องแค่ไหนยังจับจุดไม่ค่อยถูก คำถามคือ:
- controller ดึงข้อมูลจาก model แล้วส่งข้อมูลไปกำหนดการแสดงผลให้ View เพื่อส่งต่อไปแสดงอีกทีใน Template ผมเข้าคอนเซปนี้ถูกต้องหรือป่าวคับ?
- ผมยังสับสนหน้าที่ของ View คำถามคือพวก HTML และ CSS ไปสร้างที่ไหนครับ? มันมีความเยื่อมโยงกันยัง...
อยากได้เพื่อเป็นแนวทางในการศึกษาต่อไปครับ และได้ศึกษา gcms 11 แล้ว ระบบมันใหญ่และซับซ้อนเริ่มต้นไม่ถูกครับ
ขอบคุณครับ
Kenji 19 ส.ค. 2559 10 4,686
0SHAREFacebookLINE it!

ปกติแล้วการเรียกใช้ MVC จะเป็นการเรียกไปยัง Controller เป็นอันดับแรกครับ ซึ่งที่ Controller เราจะเขียนคำสั่งทุกอย่างที่นี่เป็นหลักครับ โดยที่
1. เมื่อต้องการข้อมูล เราจะไปเรียกข้อมูลจากฐานข้อมูล
2.เมื่อต้องการแสดงผล เราก็จะไปเรียก View เพื่อจัดการการแสดงผล

Model จะทำหน้าที่ในการ query ข้อมูลออกมาครับ เราจะเขียน crud ที่นี่แหละ โดยให้ผลลัพท์เป็นข้อมูล
View สำหรับ Kotchasan มันทำหน้าที่เป็น Template Engine ด้วย โดยจะมีฟังก์ชั่นจัดการ Template ที่นี่ เราสามารถ แสดงหน้าเว็บที่ View เลยก็ได้ (ด้วยการ echo) หรือจะส่งกลับไปยัง Controller เพื่อจัดการแสดงผลด้วย Response อีกทีก็ได้

ส่วน HTML และ CSS ตลอดจน JS ของ Kotchasan มีการจัดการที่ง่ายมากๆเลยครับ โดยแนวคิดก็คือ ใช้ HTML CSS และ JS เหมือนการเขียนเว็บไซต์ปกติครับ (คือ include ลงในเว็บตรงๆ)

ผมแนะนำให้ดูตัวอย่าง https://github.com/goragod/admin/blob/master/admin/modules/index/controllers/index.php ประกอบนะครับ เพราะมันจะมีการเรียกใช้ระบบที่กล่าวถึงทั้งหมดอย่างง่ายๆ

// ตัวแปรป้องกันการเรียกหน้าเพจโดยตรง
define('MAIN_INIT', __FILE__);
// check login
$request->initSession();
// ตรวจสอบการ login
Login::create();
// กำหนด skin ให้กับ template
Template::init('admin');
// backend
$view = new \Kotchasan\View;

การกระทำต่างๆก็ตามคำอธิบายเลยครับ
Template::init('admin'); คือเป็นการบอกว่าจะเลือกใช้ template ชื่อ admin https://github.com/goragod/admin/tree/master/admin/skin/admin

if ($login = Login::isMember()) {
// Controller หลัก
$main = new \Index\Main\Controller;
$bodyclass = 'mainpage';
} else {

โค้ดด้านบนคือ มันจะเรียกไปยัง \Index\Main\Controller ถ้ามีการ login แล้ว
// forgot or login
if ($request->request('action')->toString() === 'forgot') {
$main = new \Index\Forgot\Controller;
} else {
$main = new \Index\Login\Controller;
}
$bodyclass = 'loginpage';

หรือ ถ้ายังไม่ได้ login ก็จะเรียก ไปยังหน้า login หรือ forgot

// เนื้อหา
$view->setContents(array(
// main template
'/{MAIN}/' => $main->execute($request),
// title
'/อยากได้โค้ดตัวอย่าง CRUD อย่างเรียบง่าย/' => $main->title(),
// class สำหรับ body
'/{BODYCLASS}/' => $bodyclass
));
if ($login) {
// โหลดเมนู
$menu = new \Index\Menu\Controller;
$view->setContents(array(
// ID สมาชิก
'/{LOGINID}/' => $login['id'],
// ชื่อ นามสกุล
'/{LOGINNAME}/' => empty($login['name']) ? $login['username'] : $login['name'],
// ไอคอนสมาชิก
'/{USERICON}/' => WEB_URL.(is_file(ROOT_PATH.self::$cfg->usericon_folder.$login['id'].'.jpg') ? self::$cfg->usericon_folder.$login['id'].'.jpg' : 'skin/img/noicon.jpg'),
// สถานะสมาชิก
'/1/' => $login['status'],
// เมนู
'/{MENUS}/' => $menu->getTopMenus($login['status'])
));
}

โค้ดส่วนนี้ ก็จะเป็นการเอาเนื่อหาใส่ลงใน template ครับ ให้สังเกตุนะครับว่า เราจะแทนที่ข้อมูลต่างๆลงในตัวแปร {XXX} ซึ่งอยู่ใน template (ลองเปิด template index.html ดู)

// ส่งออก เป็น HTML
$response = new Response;
$response->withContent($view->renderHTML())->send();

สุดท้ายคือเป็นการแสดงผลโดยใช้ Response ครับ

$model = new \Kotchasan\Model;
$result = $model->db()->customQuery('SELECT * FROM `table_name` WHERE `status`=2 LIMIT 1');
var_dump($result);

ส่วนการใช้งาน CRUD แบบ ง่ายที่สุดก็ตามด้านบนเลยครับ เป็นการ query ข้อมูลด้วย SQL command ตรงๆ สามารถทำได้ทุกอย่างเลยครับ (สามารถเรียกใช้ที่ไหนก็ได้ ไม่ว่าจะเป็นใน Model, Controller หรือ View)

$model = new \Kotchasan\Model;
$new_id = $model->db()->insert('table_name', array(
'email' => 'admin@demo.com',
'password' => 'xxxxx',
'status' => 2
));

CREATE ครับ แบบนี้จะปลอดภัยหน่อย เพราะมีการใช้ความสามารถของ PDO ในการกรองข้อมูล
INSERT INTO `table_name` (`email`,`password`,`status`) VALUES ('admin@demo.com','xxxxx',2)

$model = new \Kotchasan\Model;
$model->db()->update('table_name', array('id', 1), array(
'email' => 'admin@demo.com',
'password' => 'xxxxx',
'status' => 2
));

UPDATE ครับ ตรง array('id', 1) สามารถใส่ค่าได้หลายรูปแบบครับ เช่น ถ้าใส่เป็นตัวเลข 1 จะได้ผลลัพท์เป็น WHERE id=1 (เหมือนกับการใช้ array('id', 1))
UPDATE `table_name` SET (`email`='admin@demo.com',`password`='xxxxx',`status`=2) WHERE `id`=1 LIMIT 1

$model = new \Kotchasan\Model;
$result = $model->db()->select('table_name', array('id', 1), array(), 1);
var_dump($result);

READ ครับ
SELECT * FROM `table_name` WHERE `id`=1 LIMIT 1

$model = new \Kotchasan\Model;
$model->db()->delete('table_name', array('id', 1));

DELETE
DELETE FROM `table_name` WHERE `id`=1
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg ขนาดไฟล์ไม่เกิน 1024
^