Slim Framework 快速開發 API 架構的 Server side 資源

本篇文章更新時間: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();

Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon