안녕하세요. 명월입니다.
이 글은 PHP에서 Request 와 Response에 대한 글입니다.
먼저 Request와 Response에 대해 설명하면 Request는 웹 브라우져에서 웹 서버로 요청한 데이터(Header와 Body)이고 Response의 경우는 웹서버에서 웹 브라우져로 응답하는 데이터(Header와 Body)의 정보입니다.
이전에 PHP에서 GET 데이터를 받을 때는 $_GET을 쓰고 POST 데이터의 경우는 $_POST를 사용하고 헤더는 $_SERVER에서 찾으면 되었습니다.
링크 - [PHP] $_SERVER, $GLOBALS, $_GET, $_POST, $_REQUEST, $_COOKIE, $_SESSION, $_FILES, $_ENV(getenv())
위 전역변수들도 Cake에서 물론 사용 가능합니다. 그러나 우리가 데이터의 흐름 구조를 설계하고 관리하기 쉽게 Cake를 사용하는 만큼 내부 객체를 사용해 봅시다.
링크 - https://book.cakephp.org/3.0/en/controllers/request-response.html
Request
웹 브라우져에서 웹 서버로 요청하는 정보입니다.
$this->getRequest()->getAttributes()와 $this->getRequest()->getParam('')
먼저 getParam은 getAttributes의 params의 내용입니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->getAttributes()); var_dump($this->getRequest()->getParam('controller')); } }
이 getAttributes()와 getParam()은 Route와 Controller간의 정보 공유입니다.
즉, 저 $routes->connect로 보낸 데이터입니다. 저의 경우는 controller와 action 밖에 없지만 저기에 넘겨야 할 데이터가 있다면 뒤에 추가하게 되면 그 데이터를 Controller에서 취득할 수 있습니다.
$this->getRequest()->getQuery()
이 함수는 Url에 붙는 GET String데이터 입니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->getQuery()); } }
참고로 여기에 두번째 파리미터까지 사용하면 default치를 설정할 수 있습니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->getQuery()); // GET String 데이터에 example이 없으면 Nothing을 있으면 GET String데이터를 $data에 넣습니다. $data = $this->getRequest()->getQuery("example", "Nothing"); var_dump($data); } }
$this->getRequest()->getData()
이 함수는 POST 데이터입니다. 사용방법은 위 getQuery()와 같습니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->getData()); // Form 데이터에 example이 없으면 Nothing을 있으면 Form데이터를 $data에 넣습니다. $data = $this->getRequest()->getData("example", "Nothing"); var_dump($data); } }
$this->getRequest()->is('')
이 함수는 웹의 요청 메서드 타입 체크 함수입니다. 즉, is('post')의 경우는 POST방식의 경우는 true, 그렇지 않으면 false를 반환합니다.
이 탐색이 가능한 키워드는 get, put, patch, post, delete, head, options, ajax, ssl, flash, requested, json, xml이 있습니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->is('get')); var_dump($this->getRequest()->is('post')); } }
$this->getRequest()->session()
이 함수는 해당 브라우져의 세션 정보를 가져올 수 있습니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->session()); // 세션에 Test 키로 Example 데이터를 넣는다. $this->getRequest()->session()->write("Test", "Example"); // 세션에 Test 키로 데이터를 취득한다. var_dump($this->getRequest()->session()->read("Test")); // 세션을 초기화 한다. $this->getRequest()->session()->clear(); // 세션에 Test 키로 데이터를 취득한다. var_dump($this->getRequest()->session()->read("Test")); } }
$this->getRequest()->getCookie('', default), $this->request->getCookieParams()
이 함수는 브라우져 쿠키를 가져오는 함수입니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ var_dump($this->getRequest()->getCookieParams()); var_dump($this->getRequest()->getCookie('TEST', 'Nothing')); } }
특이한 점이 Session cookie가 없네요.. 쿠키 중에 미들웨어 csrf의 토큰 키가 보입니다. 짜증나는 녀석이죠.. ㅎㅎ
Response
웹서버에서 브라우져로 응답하는 정보입니다. 기본적으로 cakePHP는 이 Response를 거진 자동으로 만들어 줍니다.
딱히 사용자가 수정할 영역은 없습니다. 그러나 에러 코드를 보내던가 서버에서 브라우저로 쿠키설정 (Set-Cookie)를 하던가 응답 헤더를 수정할 때 사용합니다.
$this->getResponse()->withType() , $this->getResponse()->withStringBody()
withType과 withStringBody의 반환 값은 Response 타입입니다. PHP는 메모리 참조 방식이 아닌 값 참조 방식으로 돌아가기 때문에 파라미터의 $this->getResponse()의 값과 결과값은 데이터가 다릅니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ $response = $this->getResponse()->withType('application/json')->withStringBody(json_encode(['data' => 'hello world'])); return $response; } }
$this->getResponse()->withStatus(error code);
페이지의 상태코드를 보낼 때 사용됩니다.
<?php namespace App\Controller; class HomeController extends AppController{ public function index(){ // render를 하고 response를 가져온다. $response = $this->render("/Home/index"); // 상태 코드를 599로 설정하고 리턴한다. $response = $response->withStatus(599); return $response; } }
$this->getResponse()->withCookie(cookie class);
쿠키를 설정합니다.
<?php namespace App\Controller; use Cake\Http\Cookie\Cookie; use Cake\I18n\Date; class HomeController extends AppController{ public function index(){ // Cookie를 만든다. $cookie = new Cookie( 'ExampleCookie', // 쿠키이름 1, // 쿠키 값 new \DateTime('+1 year'), // 만료 시간 '/', // 쿠키 Path 'localhost', // 쿠키 도메인 false, // secure only? true // http only ? ); $response = $this->render("/Home/index"); $response = $response->withCookie($cookie); return $response; } }
그 밖에 Request와 Response에서 지원하는 함수는 엄청 많습니다. 이 포스트에 다 담기에는 내용이 너무 많네요..
링크 - https://book.cakephp.org/3.0/en/controllers/request-response.html
더 필요한 부분은 위 Document를 참조하여 만들면 되겠습니다.
여기까지 PHP에서 Request 와 Response에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Study > PHP' 카테고리의 다른 글
[CakePHP] ORM을 이용한 테이블 Fetch 설정 (0) | 2019.10.10 |
---|---|
[CakePHP] CakePHP ORM의 Query식과 Entity, Table 클래스, Resultset (0) | 2019.10.09 |
[CakePHP] 데이터 베이스(MariaDB(Mysql))를 연결하는 방법 (0) | 2019.10.08 |
[PHP] namespace와 use (0) | 2019.10.07 |
[CakePHP] Ajax요청시 json타입(json_encode) 응답 방법과 view 파일을 선택하는 방법 (0) | 2019.10.01 |
[CakePHP] MVC 프레임워크 Cake를 설치하는 방법 (0) | 2019.10.01 |
[PHP] 자동 require 또는 include되는 함수(spl_autoload_register) (0) | 2019.09.30 |
[PHP] PHP의 익명 함수(람다식)와 클로져(closure) (0) | 2019.09.29 |