ThinkPHP 프레임워크 이해와 기본 사용법

ThinkPHP 소개

ThinkPHP는 PHP로 개발된 빠르고 간단한 객체 지향 경량 프레임워크입니다. 이 문서에서는 ThinkPHP v5.0.14을 기준으로 설명합니다.

프로젝트 구조

project  애플리케이션 배포 디렉토리
├─application           애플리케이션 디렉토리
│  ├─common             공통 모듈 디렉토리
│  ├─index              모듈 디렉토리
│  │  ├─controller      컨트롤러 디렉토리
│  │  ├─view            뷰 디렉토리
│  ├─config.php         설정 파일
│  ├─database.php       데이터베이스 설정 파일
├─public                웹 서버의 루트 디렉토리
│  ├─index.php          엔트리 포인트 파일
├─runtime               애플리케이션 실행 시 생성되는 임시 파일 저장소
└─vendor                외부 패키지 저장소 (Composer)

기본 설정

엔트리 파일은 public/index.php에 위치하며, 여기서 모든 요청이 처리됩니다. 데이터베이스 설정은 application/database.php에서 관리됩니다.

URL 접근

ThinkPHP 프로젝트의 URL 접근 규칙은 두 가지가 있습니다:

  • http://serverName/index.php/모듈/컨트롤러/액션/[파라미터명/파라미터값...]
  • http://serverName/index.php?s=/모듈/컨트롤러/액션/[파라미터명/파라미터값...]

변수 획득

ThinkPHP에서는 Request 객체를 통해 다양한 입력 변수를 안전하게 처리할 수 있습니다. 예제 코드는 다음과 같습니다:

class Sample {
    public function getVar() {
        // GET 파라미터 가져오기
        $value = request()->param('key');
        return 'GET 파라미터 값: '.$value;
    }
}

데이터베이스 작업

ThinkPHP의 Db 클래스를 이용하면 SQL 문장을 쉽게 작성하고 실행할 수 있습니다. 예제는 다음과 같습니다:

class DataOp {
    public function queryData() {
        // 원시 SQL 실행
        $result = Db::query("SELECT * FROM users WHERE id = ?", [request()->param('id')]);
        dump($result);
        
        // SQL 생성자 사용
        $result = Db::table('users')->where('id', request()->param('id'))->find();
        dump($result);
    }
}

템플릿 엔진 호출

ThinkPHP는 내장 템플릿 엔진을 제공합니다. 아래는 간단한 예제입니다:

<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>{$pageTitle}</title>
</head>
<body>
    <p>{$message}</p>
</body>
</html>
use think\Controller;

class TemplateDemo extends Controller {
    public function showTemplate() {
        $this->assign('pageTitle', '데모 페이지');
        $this->assign('message', '환영합니다!');
        return $this->fetch('template');
    }
}

보안 고려 사항

SQL 인젝션 방지를 위해 항상 Db 클래스를 사용하여 SQL 문장을 구성해야 합니다. 직접 SQL 문자열을 조합하는 것은 피해야 합니다.

태그: ThinkPHP PHP 웹개발 프레임워크 보안

7월 14일 19:45에 게시됨