本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
雖說很早就知道這款輕量級快速開發的 Slim Framework ,但一直沒機會用到。
(這陣子寫Javascript跟幫別人Debug比較多...汗)
剛好這次銀行做活動要接個後台,就拿來用拉~
需求很簡單: 就是投票!
可以針對題目的選項做投票,也無需加上防灌票機制,前端 Javascript 做 AJAX 送出投票,後端用這套開發的API來接。
寫過 NodeJS 的 Express 專案的人應該知道,他的迷人處就是 route 設計機制,而這款也是如此,下面直接貼部分原始碼來介紹一下,一個好佈署與開發的框架可以在執行專案上減少不少時間,框架開發下又能夠兼顧品質,值得推薦~
request->headers->get('Accept')) {
case 'application/json':
default:
$this->response->headers->set('Content-Type', 'application/json');
$this->response->headers->set('X-Powered-By', 'Mxp.tw');
$this->response->header('Access-Control-Allow-Origin', '*');
$this->response->header('Access-Control-Allow-Methods: GET, POST');
$this->response()->body(json_encode($data));
}
}
}
// 建立Slim應用
$app = new MXPSlim();
// 關閉輸出錯誤提示
$app->config('debug', false);
// 指定樣版目錄
$app->config(array(
'templates.path' => './',
));
$db = new MysqliDb ('localhost', 'USERNAME', 'PASSWORD', 'DBNAME');
// GET route 首頁不顯示內容
$app->get(
'/',
function () {
echo '';
}
);
/**
設定的請求網址也可以很有彈性,透過URL來分功能與當參數傳遞,
無論GET方法或POST方法都是很好的組合,RESTful的規格在這就可以被簡單實現
(其他HTTP method本次案例沒用上)。
**/
$app->get(
'/get(/:qid(/:aid))',
function ($qid="tw",$aid="mxp") use ($app) {
$db = MysqliDb::getInstance();
if (is_numeric($qid) && is_numeric($aid)){
/**
取得題目投票資料,用在顯示結果
**/
$app->outputArray(array("status"=>"OK","data"=>$voting));
} else if ($qid=="mxp" && $aid=="tw") {
/**
取得全部問題與題目投票資料,用在顯示結果
**/
$app->outputArray(array("status"=>"OK","data"=>$voting));
} else {
$app->outputArray(array("status"=>"ERROR"));
}
}
);
// POST route 投票功能
$app->post(
'/set(/:qid(/:aid))',
function ($qid="tw",$aid="mxp") use ($app) {
$vote = $app->request->post('vote');
$db = MysqliDb::getInstance();
if (is_numeric($qid) && is_numeric($aid) && isset($vote)) {
/**
撈取題目下的選項,更新投票數
**/
$app->outputArray(array("status"=>"OK","data"=>$voting));
} else {
$app->outputArray(array("status"=>"ERROR"));
}
}
);
//將錯誤頁包裝過
$app->error(function (Exception $e) use ($app) {
$app->response()->status(200);
echo "";
});
//將錯誤頁包裝過
$app->notFound(function () use ($app) {
$app->response()->status(200);
echo "";
});
//執行投票App
$app->run();