JSON과 XML 뷰

CakePHP2.1는 새로운 두 뷰 클래스가 있습니다. XmlViewJsonView를 사용하면 XML 및 JSON 응답을 쉽게 만들 수 있으며, RequestHandlerComponent 과 결합 할 수 있습니다.

RequestHandlerComponent를 사용하여 xmljson 확장 지원을 사용하여 자동으로 새로운 뷰 클래스에 영향을 미칠 수 있습니다. XmlViewJsonView는 페이지의 나머지 부분에서 데이터 뷰를 참조해주세요.

데이터 뷰를 생성하려면 두 가지 방법이 있습니다. 첫째는 _serialize 키를 사용하는 것입니다. 두 번째는 보통의 뷰 파일을 만드는 방법입니다.

데이터 뷰를 활성화

데이터 뷰 클래스를 사용하기 전에 약간의 설정이 필요합니다. :

  1. Router::parseExtensions()를 사용하여 json과 xml 확장자를 활성화 해주세요. 이 설정에 따라 라우터가 여러 확장자를 핸들링 할 수 있게됩니다.
  2. RequestHandlerComponent를 컨트롤러의 컴포넌트 리스트에 추가하세요. 이 설정으로 콘텐츠 유형에 따라 자동으로 뷰 클래스가 바뀌게됩니다.

Router::parseExtensions('json');를 라우터 파일에 추가하면 .json 확장자의 요청을 받았을 때와 application/json 헤더를받은 때에는 CakePHP가 자동으로 뷰 클래스 전환하게됩니다 .

직렬화 키와 함께 데이터 뷰를 사용

_serialize 키는 데이터 뷰를 사용하고있을 때 다른 뷰 변수가 직렬화 될 것인지 아닌지를 나타내는 특별한 뷰 변수입니다. 데이터가 json/xml로 변환되기 전에 사용자 정의 포맷터가 필요하지 않은 경우 컨트롤러 액션을위한 뷰 파일의 정의를 생략 할 수 있습니다.

만약 응답을 생성하기 전에 뷰 변수의 조작과 성형이 필요한 경우 뷰 파일을 사용해야합니다. 그 때 _serialize 값은 문자열 또는 직렬화 된 뷰 변수의 배열입니다. :

  class PostsController extends AppController {
     public function index () {
         $this->set('posts', $this->paginate ());
         $this->set('_serialize', array('posts'));
     }
 }

연결된 뷰 변수의 배열로 _serialize을 정의 할 수도 있습니다. :

  class PostsController extends AppController {
     public function index () {
         // some code that created $posts and $comments
         $this->set(compact('posts', 'comments'));
         $this->set('_serialize', array('posts', 'comments'));
     }
 }

배열로서 _serialize를 정의하면 XmlView 을 사용하는 경우에 최상위 요소로 <response>가 자동으로 추가되는 장점이 있습니다. 만약 _serialize 문자열을 설정하여 XmlView를 사용하는 경우 뷰 변수가 단일의 최상위 요소로 되어 있는지 확인하십시오. 단일 최상위 요소가 없다면 Xml의 생성은 실패 할 것이다.

뷰 파일과 함께 데이터 뷰를 사용

최종 출력을 생성하기 전에 뷰의 내용에 어떤 조작이 필요한 경우에는 뷰 파일을 사용해야합니다. 예를 들어, 자동 생성 된 HTML을 포함한 필드가 posts에 있었다고하면 아마도 JSON 응답에서는 제외하고 싶을 것입니다. 이러한 상황에서 뷰 파일은 유용합니다. :

 // 컨트롤러 코드
 class PostsController extends AppController {
     public function index () {
         $this->set(compact('posts', 'comments'));
     }
 }

 // 뷰 코드 - app/View/Posts/json/index.ctp
 foreach($posts as & $post) {
     unset($post['Post']['generated_html']);
 }
 echo json_encode(compact('posts', 'comments'));

좀더 복잡한 작업을 할 수 있으며, 또한 성형을 위해 헬퍼를 사용할 수 있습니다.

데이터 뷰 클래스는 레이아웃을 지원하지 않습니다. 뷰 파일이 연재 된 내용을 출력하는 것을 가정합니다.

class XmlView

Xml 뷰 데이터를 생성하기위한 클래스입니다. XmlView의 사용법은 위의 설명을 참조하십시오.

class JsonView

Json 뷰 데이터를 생성하기위한 클래스입니다. JsonView의 사용법은 위의 설명을 참조하십시오.

'PHP' 카테고리의 다른 글

PHP : ini_set() 함수  (0) 2015.05.19
CakePHP- View - Helper  (0) 2015.05.14
CakePHP - 뷰 - 테마  (0) 2015.05.13
CakePHP - View  (0) 2015.05.12
[CakePHP] Controller - Components  (0) 2015.05.08
Posted by dewnine
,