Restful Slim Framework and Medoo
1.Setup và cấu hình database
Các bạn setup Slim Framework theo hướng dẫn của mình ở đây
Tiếp theo các bạn setup Medoo:
composer require catfan/medoo
Tạo table tên là articles
-- -------------------------------------------------------- -- Host: 192.168.142.128 -- Server version: 5.6.47 - MySQL Community Server (GPL) -- Server OS: Linux -- HeidiSQL Version: 10.2.0.5717 -- -------------------------------------------------------- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET NAMES utf8 */; /*!50503 SET NAMES utf8mb4 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -- Dumping structure for table demo.articles DROP TABLE IF EXISTS `articles`; CREATE TABLE IF NOT EXISTS `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `created_date` datetime DEFAULT NULL, `updated_date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Dumping data for table demo.articles: ~0 rows (approximately) DELETE FROM `articles`; /*!40000 ALTER TABLE `articles` DISABLE KEYS */; INSERT INTO `articles` (`id`, `title`, `created_date`, `updated_date`) VALUES (5, 'amod Dịch COVID-19 tác động đến các lĩnh vực xã hội như thế nào?', '2020-03-25 11:56:59', '2020-03-25 04:27:28'), (6, 'Tình hình sức khoẻ 3 bệnh nhân mắc Covid-19 nặng hiện nay ra sao?', NULL, NULL), (7, 'Sau lệnh cấm, nhiều người vẫn lén ném đồ tiếp tế qua hàng rào ở KTX ĐH Quốc gia TP. HCM', '2020-03-25 03:54:56', NULL), (8, 'Gửi bún chả, bánh chưng, hoa quả, bia... vào khu cách ly cho người thân ở Hà Nội', '2020-03-25 03:55:42', NULL), (9, 'Bệnh nhân 11 tuổi ở Hải Dương đã âm tính lần 1 với Covid-19', '2020-03-25 03:56:01', NULL), (10, 'Thứ trưởng Bộ Y tế Nguyễn Trường Sơn: "Suốt ngày quần quật trong khoa, chắc chắn có lúc sơ hở"', '2020-03-25 03:56:27', NULL), (11, 'Lùi lịch thi THPT quốc gia, xét tuyển đại học thay đổi ra sao?', '2020-03-25 03:56:47', NULL), (12, 'Chủ tịch Hà Nội: Diễn biến dịch đã phức tạp hơn, có lây nhiễm chéo của bác sĩ từ bệnh nhân điều trị', '2020-03-25 03:58:00', NULL), (13, 'Bệnh nhân số 133 từng khám ở Bệnh viện Bạch Mai, được đưa về Lai Châu bằng xe cứu thương', '2020-03-25 03:58:20', NULL), (14, 'Trường hợp khẩn cấp ở nước ngoài, làm sao để trở về nhà?', '2020-03-25 03:58:25', NULL); /*!40000 ALTER TABLE `articles` ENABLE KEYS */; /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; /*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
Tạo file tên DbHandler.php và cấu hình kết nối tới database:
<?php use Medoo\Medoo; class DbHandler { private $conn; public function __construct() { $database = new Medoo([ 'database_type' => 'mysql', 'database_name' => 'demo', 'server' => '192.168.142.128', 'username' => 'root', 'password' => '1281988', ]); // opening db connection $this->conn = $database; } }
Include file vào index.php trước dòng require __DIR__ . ‘/vendor/autoload.php’;
include 'DbHandler.php';
2.Tạo các route và model:
Các route sẽ tạo ở file index.php:
Name | Description |
$app->get(‘/articles’) | List articles |
$app->get(‘/articles/{article}’) | Show one detail articles |
$app->post(‘/articles’) | Insert articles |
$app->put(‘/articles’) | Update articles |
$app->delete(‘/articles/{article}’) | Delete articles |
Tạo route $app->get(‘/articles’)
$app->get('/articles', function (Request $request, Response $response, $args) { $db = new DbHandler(); $total_records =$db->totalRow(); $current_page = isset($_GET['page']) ? $_GET['page'] : 1; $limit = 5; $total_page = ceil($total_records / $limit); // Giới hạn current_page trong khoảng 1 đến total_page if ($current_page > $total_page){ $current_page = $total_page; } else if ($current_page < 1){ $current_page = 1; } $start = ($current_page - 1) * $limit; $result=$db->getAll($start,$limit); $result = array( 'info' => '0', 'totalRecord' => $total_records, 'totalPage' => $total_page, 'perPage' => $limit, 'page' => $current_page, 'data' => $result, ); $payload = json_encode($result); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json'); });
Thêm 2 function vào file DbHandler.php
public function getAll($start, $limit) { $result = $this->conn->select('articles', '*', [ 'ORDER' => ['id' => 'DESC'],"LIMIT" => [$start, $limit]]); return $result; } public function totalRow() { $result = $this->conn->count( 'articles' ); return $result; }
Tạo route $app->get(‘/articles/{article}’)
$app->get('/articles/{article}', function (Request $request, Response $response, $args) { $id = $args['article']; $db = new DbHandler(); $result = $db->getOne($id); $payload = json_encode($result); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json'); });
Thêm function vào file DbHandler.php
public function getOne($id) { $result = $this->conn->select( 'articles', "*", array('id' => $id) ); return $result; }
Tạo route $app->put(‘/articles’)
$app->put('/articles', function ($request, $response, $args) { $paramPut= $request->getBody()->getContents(); $paramPut=json_decode($paramPut); $id=$paramPut->id; $title=trim($paramPut->title); $dataUpdate=[ 'title'=>$title, 'updated_date'=>date('Y-m-d H:i:s') ]; $db = new DbHandler(); $idInsert= $db->updateTitle($id,$dataUpdate); $result=['info'=>0,'message'=>'update success']; $payload = json_encode($result); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json'); });
Thêm function vào file DbHandler.php
public function updateTitle($id,$data){ $result = $this->conn->update( 'articles', $data, array('id' => $id) ); return 1; }
Tạo route $app->post(‘/articles’)
$app->post('/articles', function ($request, $response, $args) { $data = $request->getParsedBody(); $title=trim($data['title']); $data=[ 'title'=>$title, 'created_date'=>date("Y-m-d H:i:s") ]; $db = new DbHandler(); $idInsert= $db->insertTitle($data); $result=['info'=>0,'message'=>'insert success','last_id_insert'=>$idInsert]; $payload = json_encode($result); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json'); });
Thêm function vào file DbHandler.php
public function insertTitle($data) { $result = $this->conn->insert( 'articles', $data ); return $this->conn->id(); }
Tạo route $app->delete(‘/articles/{article}’)
$app->delete('/articles/{article}', function ($request, $response, $args) { $id = $args['article']; $db = new DbHandler(); $db->deleteTitle($id); $result=['info'=>0,'message'=>'delete success']; $payload = json_encode($result); $response->getBody()->write($payload); return $response ->withHeader('Content-Type', 'application/json'); });
Thêm function vào file DbHandler.php
public function deleteTitle($id) { $result = $this->conn->delete( 'articles', array('id' => $id) ); return 1; }
File index.php hoàn chỉnh:
File DbHandler.php hoàn chỉnh:
Code Project in here