간단한 백엔드 만들기 클래스

· 2019-06-09 (일) 15:42:07 · 3774 · 1

vue 프론트엔드 작업중인데 백엔드가 완성되지 않아서 목업api로 사용하려고 만들어 봤습니다.

간단하게 백엔드를 구성할 수 있습니다.

 

 

<?php
class App {
    
    private $params = array();
    
    // 생성자 (CORS 처리)
    public function __construct(){
        if (isset($_SERVER['HTTP_ORIGIN'])) {
            header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
            header('Access-Control-Allow-Credentials: true');
            header('Access-Control-Max-Age: 86400');
        }
        
        // OPTIONS 요청일때
        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
                header("Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS");

            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
                header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

            exit(0);
        }
    }
    
    // json 타입으로 결과 뿌리는 함수
    public function print($arr, $code=200) {
        http_response_code($code);
        echo json_encode($arr, JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // 파라미터 가져오기 (post, patch, put... 모두 이걸로 얻어옴)
    public function getData() {
        return json_decode(file_get_contents('php://input'), true);
    }
    
    // URL 파라미터 구해오기
    public function getParams() {
        return $this->params;
    }
    
    // URL 분석
    private function route($pat) {
    
        $pat = '~^'.$pat.'$~i';
        
        $request = $_SERVER['REQUEST_URI'];
        $ret = preg_match($pat, $request, $mat);
        if (count($mat) > 1) {
            array_shift($mat);
            $this->params = $mat;
        }
        return $ret;
    }
    
    // METHOD 체크
    private function checkMethod($method) {
        $_method = strtolower($_SERVER["REQUEST_METHOD"]);
        if ($_method !== $method) return false;
        return true;
    }
    
    // GET 요청 분석
    public function get($pat) {
        if(!$this->checkMethod('get')) return false;
        return $this->route($pat);
    }

    // POST 요청 분석
    public function post($pat) {
        if(!$this->checkMethod('post')) return false;
        return $this->route($pat);
    }

    // PUT 요청 분석
    public function put($pat) {
        if(!$this->checkMethod('put')) return false;
        return $this->route($pat);
    }

    // PATCH 요청 분석
    public function patch($pat) {
        if(!$this->checkMethod('patch')) return false;
        return $this->route($pat);
    }

    // DELETE 요청 분석
    public function delete($pat) {
        if(!$this->checkMethod('delete')) return false;
        return $this->route($pat);
    }
}

 

 

 

 

<< 사용방법 >>


//--------------------------
// 객체생성
//--------------------------
$app = new App();


//--------------------------
// 라우터
//--------------------------
/*
POST
*/
if ($app->post('/signin')) {

    // URL 파라미터 구해오기(정규식부분에서 괄호 부분 순서대로 가져옴)

    $params = $app->getParams();

 

    // POST, PUT 등에서 보내온 데이타

    $data = $app->getData();

 

    //echo $data['user_id'];
    //echo $data['password'];

 

    // 결과출력
    $app->print(array(
        'user_id' => 'melong'.
        'name' => '메롱'
    ));

/*
GET
*/
} else if ($app->get('/users/([a-zA-Z0-9_])')) {
    /* "/user_id/melong" 을 호출시 */
    //echo $params[0]; // melong

/*
PUT
*/
} else if ($app->put('/users/([a-zA-Z0-9])')) {
    //echo $data['user_id'];
    //echo $data['password'];
    //echo $params[0];

/*
PATCH
*/
} else if ($app->patch('/users/([a-zA-Z0-9])')) {
    //

/*
DELETE
*/
} else if($app->delete('/users/([a-zA-Z0-9])')) {
    //echo $params[0];

/*
여러개의 URL 파라미터
*/
} else if ($app->get('/article/([0-9])/([0-9])/edit')) {
    //echo $params[0];
    //echo $params[1];
}

|

댓글 1개

2022-09-02 (금) 14:34:24
압도적 감사!
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
PHP 19-06-24 조회 3,159
PHP 19-06-09 조회 3,775
MySQL 19-04-01 조회 4,819
jQuery 19-03-20 조회 4,216
node.js 19-02-12 조회 3,312
node.js 19-02-12 조회 3,044
node.js 19-02-12 조회 3,311
node.js 19-02-07 조회 3,275
node.js 19-02-07 조회 3,029
node.js 19-02-07 조회 3,163
node.js 19-02-04 조회 2,897
node.js 19-02-04 조회 2,890
node.js 19-02-04 조회 3,319
node.js 19-01-31 조회 2,431
node.js 19-01-31 조회 2,577
node.js 19-01-31 조회 3,075
node.js 19-01-28 조회 2,835
node.js 19-01-28 조회 2,915
node.js 19-01-28 조회 2,740
node.js 19-01-22 조회 3,082
node.js 19-01-22 조회 2,836
node.js 19-01-22 조회 3,269
node.js 19-01-16 조회 2,703
node.js
[node.js]
19-01-16 조회 2,612
node.js 19-01-16 조회 9,288
node.js 19-01-12 조회 4,362
node.js 19-01-12 조회 2,981
node.js 19-01-12 조회 3,107
node.js 19-01-11 조회 2,680
node.js 19-01-11 조회 3,992