요청
Flight은 HTTP 요청을 하나의 객체로 캡슐화하며, 이를 다음과 같이 접근할 수 있습니다:
$request = Flight::request();
일반적인 사용 사례
웹 애플리케이션에서 요청을 처리할 때, 일반적으로 헤더를 가져오거나 $_GET
또는 $_POST
매개변수, 또는 원시 요청 본문을 가져오고 싶을 것입니다. Flight은 이러한 작업을 간단히 처리할 수 있는 인터페이스를 제공합니다.
다음은 쿼리 문자열 매개변수를 가져오는 예제입니다:
Flight::route('/search', function(){
$keyword = Flight::request()->query['keyword'];
echo "You are searching for: $keyword";
// 데이터베이스를 조회하거나 $keyword를 사용하여 다른 작업을 수행하세요
});
다음은 POST 메서드를 사용하는 폼 예제입니다:
Flight::route('POST /submit', function(){
$name = Flight::request()->data['name'];
$email = Flight::request()->data['email'];
echo "You submitted: $name, $email";
// $name과 $email을 사용하여 데이터베이스에 저장하거나 다른 작업을 수행하세요
});
요청 객체 속성
요청 객체는 다음과 같은 속성을 제공합니다:
- body - 원시 HTTP 요청 본문
- url - 요청되는 URL
- base - URL의 상위 서브디렉토리
- method - 요청 메서드 (GET, POST, PUT, DELETE)
- referrer - 리퍼러 URL
- ip - 클라이언트의 IP 주소
- ajax - 요청이 AJAX 요청인지 여부
- scheme - 서버 프로토콜 (http, https)
- user_agent - 브라우저 정보
- type - 콘텐츠 유형
- length - 콘텐츠 길이
- query - 쿼리 문자열 매개변수
- data - POST 데이터 또는 JSON 데이터
- cookies - 쿠키 데이터
- files - 업로드된 파일
- secure - 연결이 안전한지 여부
- accept - HTTP accept 매개변수
- proxy_ip - 클라이언트의 프록시 IP 주소.
$_SERVER
배열에서HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
,HTTP_X_FORWARDED
,HTTP_X_CLUSTER_CLIENT_IP
,HTTP_FORWARDED_FOR
,HTTP_FORWARDED
를 순서대로 검색합니다. - host - 요청 호스트 이름
- servername -
$_SERVER
의 SERVER_NAME
query
, data
, cookies
, 및 files
속성은 배열 또는 객체로 접근할 수 있습니다.
쿼리 문자열 매개변수를 가져오기 위해 다음과 같이 할 수 있습니다:
$id = Flight::request()->query['id'];
또는 다음과 같이 할 수 있습니다:
$id = Flight::request()->query->id;
원시 요청 본문
PUT 요청과 같은 경우 원시 HTTP 요청 본문을 가져오기 위해 다음과 같이 할 수 있습니다:
$body = Flight::request()->getBody();
JSON 입력
application/json
유형과 데이터 {"id": 123}
으로 요청을 보내면, data
속성에서 사용할 수 있습니다:
$id = Flight::request()->data->id;
$_GET
$_GET
배열은 query
속성을 통해 접근할 수 있습니다:
$id = Flight::request()->query['id'];
$_POST
$_POST
배열은 data
속성을 통해 접근할 수 있습니다:
$id = Flight::request()->data['id'];
$_COOKIE
$_COOKIE
배열은 cookies
속성을 통해 접근할 수 있습니다:
$myCookieValue = Flight::request()->cookies['myCookieName'];
$_SERVER
$_SERVER
배열에 접근하기 위한 바로 가기 방법으로 getVar()
메서드를 사용할 수 있습니다:
$host = Flight::request()->getVar('HTTP_HOST');
업로드된 파일에 접근하기 위한 $_FILES
업로드된 파일은 files
속성을 통해 접근할 수 있습니다:
$uploadedFile = Flight::request()->files['myFile'];
파일 업로드 처리 (v3.12.0)
프레임워크를 사용하여 파일 업로드를 처리할 수 있는 헬퍼 메서드가 있습니다. 기본적으로 요청에서 파일 데이터를 가져와 새 위치로 이동합니다.
Flight::route('POST /upload', function(){
// 입력 필드가 <input type="file" name="myFile">와 같다고 가정
$uploadedFileData = Flight::request()->getUploadedFiles();
$uploadedFile = $uploadedFileData['myFile'];
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
});
여러 파일을 업로드한 경우, 이를 반복적으로 처리할 수 있습니다:
Flight::route('POST /upload', function(){
// 입력 필드가 <input type="file" name="myFiles[]">와 같다고 가정
$uploadedFiles = Flight::request()->getUploadedFiles()['myFiles'];
foreach ($uploadedFiles as $uploadedFile) {
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
}
});
보안 팁: 사용자 입력, 특히 파일 업로드 시 항상 유효성 검사와 세정화를 수행하세요. 허용할 확장자 유형을 확인하지만, 파일의 "마법 바이트"를 검증하여 사용자가 주장하는 파일 유형이 실제로 맞는지 확인하세요. 이에 대한 기사 및 라이브러리가 있습니다.
요청 헤더
요청 헤더는 getHeader()
또는 getHeaders()
메서드를 사용하여 접근할 수 있습니다:
// 예를 들어 Authorization 헤더가 필요할 수 있음
$host = Flight::request()->getHeader('Authorization');
// 또는
$host = Flight::request()->header('Authorization');
// 모든 헤더를 가져오기 위해
$headers = Flight::request()->getHeaders();
// 또는
$headers = Flight::request()->headers();
요청 본문
원시 요청 본문은 getBody()
메서드를 사용하여 접근할 수 있습니다:
$body = Flight::request()->getBody();
요청 메서드
요청 메서드는 method
속성 또는 getMethod()
메서드를 사용하여 접근할 수 있습니다:
$method = Flight::request()->method; // 실제로 getMethod()를 호출합니다
$method = Flight::request()->getMethod();
노트: getMethod()
메서드는 먼저 $_SERVER['REQUEST_METHOD']
에서 메서드를 가져오며, 존재하면 $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']
나 $_REQUEST['_method']
로 덮어쓸 수 있습니다.
요청 URL
URL의 일부를 편리하게 조합하기 위한 몇 가지 헬퍼 메서드가 있습니다.
전체 URL
전체 요청 URL은 getFullUrl()
메서드를 사용하여 접근할 수 있습니다:
$url = Flight::request()->getFullUrl();
// https://example.com/some/path?foo=bar
기본 URL
기본 URL은 getBaseUrl()
메서드를 사용하여 접근할 수 있습니다:
$url = Flight::request()->getBaseUrl();
// 끝에 슬래시가 없습니다.
// https://example.com
쿼리 파싱
URL을 parseQuery()
메서드에 전달하여 쿼리 문자열을 연관 배열로 파싱할 수 있습니다:
$query = Flight::request()->parseQuery('https://example.com/some/path?foo=bar');
// ['foo' => 'bar']