CakePHP - View

PHP 2015. 5. 12. 18:56

뷰(View)는 MVC의 V입니다. 뷰는 요청에 대한 출력을 생성하는 역할을 담당합니다. 여기서 말하는 출력은 대부분의 경우 HTML 폼이나 XML, JSON 등을 의미하지만 파일 스트림의 생성과 사용자가 다운로드 가능한 PDF를 생성 할 뷰 레이어의 역할입니다.

CakePHP는 아래의 전형적인 그리기 시나리오에 대응하기위한 몇 가지 기본 뷰 클래스를 준비하고 있습니다. :

  • XML이나 JSON 웹 서비스를 만들 때 JSON과 XML 뷰 를 사용할 수 있습니다.
  • 보호 된 파일과 동적으로 생성 된 파일을 제공하는 경우, 미디어 뷰 를 사용할 수 있습니다.
  • 여러 테마의 뷰를 작성하는 경우 테마 를 사용할 수 있습니다.

뷰 템플릿

CakePHP의 뷰 레이어는 사용자와의 대화 수단입니다. 대부분의 경우 뷰는(X)HTML 문서를 브라우저에 반환합니다. 하지만 가끔은 Flash 개체에 AMF 데이터를 제공하거나 SOAP를 통해 원격 애플리케이션에 반응하거나 CSV 파일을 출력 할 필요가 있을지도 모릅니다.

기본적으로 CakePHP의 뷰 파일은 일반적인 PHP로 작성되고 확장자는 .ctp(CakePHP Template)입니다. 뷰 파일은 컨트롤러로부터 받은 데이터를 가져 오는 데 필요한 로직이 적혀 있습니다. 만약 Twig와 Smarty와 같은 템플릿 언어를 사용 싶다면 뷰의 서브 클래스가 템플릿 언어와 CakePHP의 중개를 해주는 것입니다.

뷰 파일은 /app/View/ 에있는 컨트롤러 이름의 폴더에 관련된 액션 이름으로 저장됩니다. 예를 들어, Products 컨트롤러의 “view()”액션 뷰 파일은 일반적으로/app/View/Products/view.ctp입니다.

CakePHP의 뷰 레이어는 여러 파트에 의해 만들어지고 있습니다. 각 파트는 각각 역할을 가지고 있으며, 이 장에서 설명하고 있습니다. :

  • View : 뷰는 실행중인 작업 특정 페이지의 일부분입니다. 응용 프로그램의 응답의 중심입니다.
  • Element : 재사용 가능한 간단한 코드입니다. 요소는 보통 뷰에서 그려집니다.
  • Layout : 응용 프로그램의 많은 인터페이스를 랩하고있을 표시 코드를 포함하는 뷰 파일입니다. 대부분의 뷰는 레이아웃 속에 그려집니다.
  • Helper :이 클래스는 뷰 레이어의 다양한 장소에서 필요한 로직을 캡슐화합니다. 특히, CakePHP 도우미 양식의 구축 및 AJAX 기능의 구축 모델 데이터의 페이지 전환, RSS 피드의 제공 등을 도와줍니다.

뷰의 상속

버전 2.1에서 추가.

뷰의 상속에 의해 어떠한 뷰를 다른 뷰에서 랩핑 할 수 있습니다. 뷰 블록 과 결합하여 뷰를 DRY 로 유지하기위한 강력한 방법을 제공합니다. 예를 들어, 당신이 작성하는 응용 프로그램의 특정 뷰에서 사이드 바의 렌더링을 바꿀 필요가 있다고 가정합니다. 이 경우 일반적인 뷰 파일을 상속하여 사이드 바의 마크업의 반복을 피할 수 있습니다. 이것은 다음과 같은 변경만으로 간단하게 가능합니다. :

 //app/View/Common/view.ctp
 <h1> <?php echo $this->fetch('title');?> </h1>
 <?php echo $this->fetch('content');?> 

 <div class = "actions">
 <h3> Related actions </h3>
 <ul>
      <?php echo $this->fetch('sidebar');?> 
 </ul>
 </div>

이 뷰 파일이 부모보기로 사용되었다고합니다. 그러자 sidebartitle 블록이 정의 된 뷰가 상속되는 것이 기대됩니다. content 블록은 CakePHP가 만드는 특별한 블록에서 뷰의 상속에 포착되지 않은 모든 콘텐츠가 포함되어 있습니다. 뷰 파일에 post 데이터가 저장되어있는 $posts라는 변수가있는 경우 뷰는 다음과 같이됩니다. :

<?php
//app/View/Posts/view.ctp
 $this->extend('/Common/view');

 $this->assign('title', $post);

 $this->start('sidebar');
 ?> 
 <li>
 <?php
 echo $this->Html->link('edit', array(
     'action'=> 'edit'
     $post [ 'Post'] [ 'id']
 ));?> 
 </li>
 <?php $this->end();?> 

//나머지 내용은 부모 뷰의 'content'블록으로 사용할 수 있습니다.
 <?php echo h($post [ 'Post'] [ 'body');

위의 예는 어떻게 뷰를 상속 할 수 있는지를 보여 주며 블록 세트를 생성합니다. 몇 가지 정의되지 않은 블록은 포착되고 content라는 특별한 이름의 블록에 배치됩니다. 뷰에 extend()의 호출이 포함 된 경우 현재 뷰 파일은 끝까지 실행됩니다. 일단 실행이 완료되면 상속 된 뷰가 그려집니다. 하나의 뷰 파일에서 두 번 이상 extend()가 호출 될 경우 다음 처리되는 부모 뷰를 덮어 씁니다. :

 $this->extend('/Common/view');
 $this->extend('/Common/index');

이 예에서는/Common/index.ctp를 부모 뷰와 그리기 결과를 얻을 수 있습니다.

상속 된 뷰는 원하는만큼 중첩 할 수 있습니다. 극단적 인 이야기 모든 뷰에서 다른 뷰를 상속하는 것조차 할 수 있습니다. 이 경우 각 부모 뷰는 하나 이전 뷰의 내용을 content 블록으로 가져올 수 있습니다.

content를 블록 이름으로 사용하는 것은 피해야한다. CakePHP는 상속 된 뷰에서 포착되지 않은 콘텐츠로 취급 해 버립니다.

뷰 블록을 사용

버전 2.1에서 추가.

뷰 블록은 $scripts_for_layout 대신 뷰/레이아웃 안에서는 어디에서나 슬롯이나 블록을 정의 할 수있는 확장 가능한 API를 제공합니다. 예를 들어 사이드 바 및 레이아웃의 끝과 시작에 어셋 읽기 영역의 구현등이 문이 블록의 전형적인 사용 예입니다. 블록을 구현하는 두 가지 방법이 있습니다. 캡쳐되는 블록으로 하거나 직접 할당 될 수 있습니다. start(), append(), end() 메서드는 포착되는 블록과 함께 작동합니다. :

 //sidebar 블록 만들기
 $this->start('sidebar');
 echo $this->element('sidebar/recent_topics');
 echo $this->element('sidebar/recent_comments');
 $this->end();


 //sidebar의 끝에 추가
 $this->append('sidebar');
 echo $this->element('sidebar/popular_topics');
 $this->end();

start()를 여러 번 사용하여 블록을 추가 할 수 있습니다. assign()는 클리어 하거나 임의의 타이밍에 블록을 덮어쓰는데 사용됩니다. :

 //sidebar 블록에서 이전 내용을 지우려면
 $this->assign('sidebar', '');

2.3에서 몇 가지 방법이 블록구조에 추가되었습니다. prepend()는 기존의 블록의 시작 부분에 내용을 추가합니다. :

 //sidebar의 선두에 추가
 $this->prepend('sidebar', 'this content goes on top of sidebar');

startIfEmpty()는 블록이 비어있거나 또는 정의되지 않은 경우에만 블록을 시작하고자 할 때 사용합니다. 블록이 이미 존재하는 경우는 포착된 콘텐츠는 폐기됩니다. 블록의 내용이 존재하지 않는 경우에 대해서 디폴트 내용을 준비하고 싶은 경우에 사용하면 편리합니다. :

//뷰 파일
//navbar 블록을 생성
 $this-> startIfEmpty('navbar');
 echo $this-> element('navbar');
 echo $this-> element('notifications');
 $this-> end();
 //부모의 view/layout
 <?php $this->startIfEmpty('navbar');?> 
 <p> 블록이 시점에서 정의되지 않은 경우, 대신해서 이 내용을 표시합니다. </p>
 <?php $this->end();?> 

//부모 view/layout의 어딘가 다른 곳
 echo $this-> fetch('navbar');

위의 예에서는 navbar 블록에 첫 번째 섹션에서 추가 된 내용 만 저장됩니다. 이 블록은 자식 뷰에 정의되어 있기 때문에 기본 내용은

태그와 함께 삭제됩니다.

content라는 블록의 사용은 피해야한다. 이 이름은 CakePHP 내부에서 뷰의 상속 레이아웃의 뷰 콘텐츠를 위해 사용하고 있습니다.

블록 표시

버전 2.1에서 추가.

블록의 표시는 fetch() 메소드를 사용합니다. fetch()는 블록이 존재하지 않았던 경우 ‘’를 반환하기 때문에 블록이 안전하게 출력됩니다. :

 echo $this->fetch('sidebar');

fetch를 사용하면 블록이 존재하는지 여부에 따라 블록으로 싸여져있는 내용의 표시를 전환 할 수 있습니다. :

 //in app/View/Layouts/default.ctp
 <?php if($this->fetch('menu')) :?> 
 <div class = "menu">
 <h3> Menu options </h3>
      <?php echo $this->fetch('menu');?> 
 </div>
 <?php endif;?>

2.3.0에서 블록의 기본 값을 지정할 수있게되었습니다. 이에 따라 블록의 내용이 비어있을 때 placeholder를 표시하는 것이 쉽게 가능합니다. 기본값은 2번째 인수로 지정합니다. :

  <div class = "shopping-cart">
 <h3> Your Cart </h3>
      <?php echo $this->fetch('cart', 'Your cart is empty');?> 
 </div>

버전 2.3에서 변경 : $default 인수는 2.3에 추가되었습니다.

스크립트와 CSS 파일의 블록을 사용

버전 2.1에서 추가.

블록은 비추천 레이아웃 변수 $scripts_for_layout을 바꿉니다. 이 변수 대신에 블록을 사용해야합니다. HtmlHelper는 뷰 블록을 연결합니다. script(), css(), meta() 의 각 메소드는 inline = false 옵션이 전달될 때 각각 같은 이름의 블록을 갱신합니다. :

  <?php
//뷰 파일에서
 $this->Html->script('carousel', array('inline'=> false));
 $this->Html->css('carousel', array('inline'=> false));
 ?> 

//레이아웃 파일 중
 <! DOCTYPE html>
 <html lang = "en">
 <head>
 <title> <?php echo $this->fetch('title');?> </title>
      <?php echo $this->fetch('script');?> 
      <?php echo $this->fetch('css');?> 
 </head>
//레이아웃이 아래 계속

HtmlHelper 스크립트와 CSS가 어떤 블록에 대응하는 방법을 제어합니다. :

//뷰 중
 $this->Html->script('carousel', array('block'=> 'scriptBottom'));

//레이아웃 중
 echo $this->fetch('scriptBottom');

레이아웃

레이아웃은 뷰를 감싸는 표시 용 코드를 포함합니다. 모든 뷰에서 보여주기를 원한다면 레이아웃에 배치되어야합니다.

레이아웃 파일은 /app/View/Layouts에 배치되어야합니다. 새로운 기본 레이아웃을 /app/View/Layouts/default.ctp로 작성하여 CakePHP의 기본 레이아웃은 덮어 씁니다. 일단 새로운 기본 레이아웃이 만들어지면 페이지가 렌더링 될 때 컨트롤러에 의해 렌더링 된 뷰 코드가 새로운 기본 레이아웃의 내부에 배치되게 됩니다.

레이아웃을 만들 때 뷰의 코드가 어디에 배치되는지를 CakePHP에 알려줄 필요가 있습니다. 그러기 위해서는 만든 레이아웃에 $this-> fetch(‘content’)가 포함되어 있는지 확인하십시오. 그러면 기본 레이아웃이 어떤 것인지 실제로 살펴보겠습니다. :

  <! DOCTYPE html>
 <html lang = "en">
 <head>
 <title> <?php echo $title_for_layout?> </title>
 <link rel = "shortcut icon"href = "favicon.ico"type = "image/x-icon">
 <! - 외부 파일과 스크립트 파일이 여기에로드됩니다(자세한 내용은 HTML 헬퍼를 참조하십시오) ->
 <?php
 echo $this->fetch('meta');
 echo $this->fetch('css');
 echo $this->fetch('script');
 ?> 
 </head>
 <body>

 <! - 만약 모든 뷰에서 메뉴를 표시 할 경우,
 여기에로드합니다.  ->
 <div id = "header">
 <div id = "menu"> ... </div>
 </div>

 <! - 뷰에 표시 할 것은 여기에 배치합니다.  ->
 <?php echo $this->fetch('content');?> 

 <! - 각 페이지에 표시 할 바닥 글은 여기에 추가하십시오.  ->
 <div id = "footer"> ... </div>

 </body>
 </html>

2.1 이전 버전에서는 fetch() 메소드는 사용할 수 없습니다. fetch('content')$content_for_layout을 대체 fetch('meta'), fetch('css'), fetch('script')의 각 행은 버전 2.0에서는 $scripts_for_layout 변수에 포함되어 있습니다.

내장 HtmlHelper를 사용하는 뷰의 경우, script, css, meta 블록에 정의 된 일부 내용이 포함되어 있습니다. 뷰에서 javascript와 CSS 파일이 포함 된 것은 편리합니다.

HtmlHelper::css() 와 HtmlHelper::script() 을 뷰 파일에서 사용할 때, html 소스를 같은 이름으로 블록 안에 배치하는 ‘inline’옵션은 ‘false’로하십시오.(자세한 사용법은 API를 참조하십시오.)

content 블록은 렌더링 된 뷰의 내용을 포함합니다.

$title_for_layout는 페이지 제목을 포함합니다. 이 변수는 자동으로 생성되지만 컨트롤러/뷰에서 설정하면 덮어 쓸 수 있습니다.

레이아웃의 제목을 설정하기 위해서는 컨트롤러에서 $title_for_layout 변수를 설정하는 것이 가장 간단합니다. :

  class UsersController extends AppController {
     public function view_active() {
         $this->set('title_for_layout', 'View Active Users');
     }
 }

또한 뷰 파일에서 title_for_layout 변수를 설정할 수도 있습니다. :

  $this->set('title_for_layout', $titleContent);

원하는만큼 레이아웃을 만들 수 있습니다. 레이아웃은 app/View/Layouts 디렉토리에 파일을 만들고, 컨트롤러 액션 중 하나 뷰 $layout 속성을 바꾸는 것만으로 만들 수 있습니다. :

 //컨트롤러
 public function admin_view() {
    //stuff
     $this->layout = 'admin';
 }

//뷰 파일에서
 $this->layout = 'loggedin';

예를 들어 내 사이트에 작은 광고 배너 영역이 있다고합니다. 이 경우, 작은 광고 영역이 포함 된 새로운 레이아웃을 만들어 다음과 같이 전체 컨트롤러의 액션에서 지정하는 것도 가능합니다.:

  class UsersController extends AppController {
     public function view_active() {
         $this->set('title_for_layout', 'View Active Users');
         $this->layout = 'default_small_ad';
     }

     public function view_image() {
         $this->layout = 'image';
        //output user image
     }
 }

CakePHP는 두 코어 레이아웃(CakePHP의 기본 레이아웃 외에) ‘ajax’와 ‘flash’를 제공하고 있습니다. Ajax 레이아웃은 Ajax 응답을 조립하기 위해 편리하고 빈 레이아웃으로 되어 있습니다.(ajax 호출은 인터페이스를 완벽하게 표현 한다기 보다는 약간의 마크 업이 필요한 것이 대부분입니다.) flash 레이아웃은 Controller::flash() 메소드 메시지 표시에 사용됩니다.

쉽고 빠르게 text/html이 아닌 컨텐츠를 제공하기 위해 다른 세 가지 핵심 레이아웃, xml, js, rss가 있습니다.

플러그인에서 레이아웃을 사용

버전 2.1에서 추가.

만약 기존의 플러그인에서 레이아웃을 사용하려면, 플러그인 기법 을 사용할 수 있습니다. 컨텍트 플러그인에서 컨텍트의 레이아웃을 사용하는 경우는 다음과 같습니다. :

  class UsersController extends AppController {
     public function view_active() {
         $this->layout = 'Contacts.contact';
     }
 }

엘리먼트

많은 응용 프로그램에는 다양한 페이지에서 때로는 다른 레이아웃의 페이지에서 반복 요구되는 표시 용 코드의 작은 블록이 있습니다. CakePHP는 재사용이 필요한 웹 사이트의 파트를 계속해서 사용에 도움을줍니다. 이 재사용 가능한 부품은 엘리먼트라고합니다. 광고, 도움말 박스, 네비게이션 컨트롤 엑스트라 메뉴, 로그인 폼 풍선은 CakePHP에서 엘리먼트로 구현됩니다. 엘리먼트는 기본적으로 다른 뷰 레이아웃 요소에 포함 할 수있는 작은 뷰입니다. 요소는 뷰에서 반복 렌더링되는 부분의 가독성을 개선하기 위해 사용할 수 있습니다. 응용 프로그램의 내용의 일부를 재사용하는 데 도움이됩니다.

엘리먼트는/app/View/Elements/폴더에 .ctp 확장자를 가진 이름으로 배치됩니다. 다음 예제는 뷰의 element 메소드를 사용하여 출력하고 있습니다. :

  echo $this->element('helpbox');

요소에 변수를 전달

element 메서드의 두 번째 인수를 통해 요소에 데이터를 전달할 수 있습니다. :

  echo $this->element('helpbox', array(
     "helptext"=> "Oh, this text is very helpful."
 ));

요소 파일의 내부에서는 인수로 전달 된 모든 변수를 매개 변수 배열의 구성원으로 사용할 수 있습니다.(뷰 파일에서 컨트롤러 Controller::set() 메소드처럼 동작합니다.) 위의 예에서는/app/View/Elements/helpbox.ctp에서 $helptext 변수를 사용할 수 있습니다. :

 //app/View/Elements/helpbox.ctp의 내부
 echo $helptext; //"Oh, this text is very helpful."라고 출력됩니다

View::element() 메서드는 엘리먼트에 대한 옵션을 지원합니다. 지원되는 옵션은 ‘cache’와 ‘callbacks’입니다. 예를 들면 :

  echo $this->element('helpbox', array(
         "helptext"=> "This is passed to the element as $helptext"
         "foobar"=> "This is passed to the element as $foobar"
     ),
     array(
         "cache"=> "long_view"//"long_view"캐시 설정을 사용합니다
         "callbacks"=> true//요소에서 before/afterRender가 불려 true로 설정하십시오
     )
 );

요소는 Cache 클래스를 통해 캐시됩니다. 구성된 캐시의 어느 하나에 요소가 저장되도록 설정할 수 있습니다. 그 결과, 어디에 언제까지 엘리먼트를 저장할 것인지를 유연하게 제어 할 수 있습니다. 응용 프로그램에서 동일한 요소의 다른 버전을 캐시하기 위해서는 다음과 같은 형식을 사용하여 독특한 캐시 키를 제공하십시오. :

  $this->element('helpbox', array(), array(
         "cache"=> array('config'=> 'short', 'key'=> 'unique value')
     )
 );

requestAction() 을 사용해서 요소의 장점을 최대한 활용할 수 있습니다. requestAction() 함수는 뷰 변수를 컨트롤러 액션에서 따온 배열로서 돌려줍니다. 이에 따라 요소를 진정한 MVC 스타일에 유지하는 것이 가능합니다. 엘리먼트용의 뷰 변수를 준비한 컨트롤러 액션을 만들고 그 뒤 컨트롤러로부터 엘리먼트 뷰 변수를 주기위해, element() 메서드의 두 번째 인수 속에서 requestAction()를 호출 해주세요.

이것을 실제로 확인하기 위해 Post의 예제 컨트롤러에 다음과 같은 코드를 추가하십시오. :

  class PostsController extends AppController {
    //...
     public function index() {
         $posts = $this->paginate();
         if($this->request->is('requested')) {
             return $posts;
         } else {
             $this->set('posts', $posts);
         }
     }
 }

그러면 엘리먼트 안에서 paginate된 posts 모델에 액세스 할 수 있습니다. 정렬 된 목록에서 최신의 5 건을 취득하기 위해서는 다음과 같이하면 좋습니다. :

 <h2> Latest Posts </h2>
 <?php $posts = $this->requestAction('posts/index/sort:created/direction:asc/limit:5'); ?> 
 <ol>
 <?php foreach($posts as $post) :?> 
 <li> <?php echo $post [ 'Post'] [ 'title'];?> </li>
 <?php endforeach;?> 
 </ol>

엘리먼트를 캐시하기

캐시 매개 변수의 전달만으로 CakePHP의 뷰 캐시의 혜택을 얻을 수 있습니다. true를 전달하면 ‘default’캐시 설정에 따라 엘리먼트가 캐시됩니다. false의 경우 어떤 캐시 설정을 사용할지를 설정할 수 있습니다. Cache 설정에 대한 자세한 내용은 Caching을 참조해주세요. 엘리먼트 캐시의 간단한 예는 다음과 같습니다. :

  echo $this->element('helpbox', array(), array('cache'=> true));

어떤 뷰에서 같은 엘리먼트가 두 번 이상 렌더링되는 경우 매번 다른 이름의 ‘key’매개 변수를 설정하여 확실하게 안정적으로 캐시 할 수 있습니다. 따라서 element()를 이전 호출시에 생성 된 캐시를 연속 element()의 호출의 결과로 덮어 것을 피할 수 있습니다. :

  echo $this->element(
     'helpbox'
     array('var'=> $var)
     array('cache'=> array('key'=> 'first_use', 'config'=> 'view_long')
 );

 echo $this->element(
     'helpbox'
     array('var'=> $differenVar)
     array('cache'=> array('key'=> 'second_use', 'config'=> 'view_long')
 );

위의 예에서는 2 개의 element()의 결과가 개별적으로 캐시되는 것이 보증되고 있습니다. 만약 모든 요소의시에서 동일한 설정을 사용하려면, View::$elementCache 를 설정하여 반복을 피할 수 있습니다. CakePHP는 element()에 아무것도 설정되어 있지 않은 경우,이 설정을 사용합니다.

플러그인 엘리먼트에 대한 요구

2.0

플러그인 엘리먼트를 로드하는 plugin 옵션을 사용하십시오.(버전 1.x의 data 옵션에서 이동했습니다.) :

  echo $this->element('helpbox', array(), array('plugin'=> 'Contacts'));

2.1

만약 플러그인을 사용하고 플러그인 요소를 사용하고 싶다고 생각한다면 익숙한 플러그인 기법 을 사용하는 것만으로 좋다. 뷰 컨트롤러/액션 플러그인 그리기 중일 때 다른 플러그인 이름이 사용되지 않으면 모든 엘리먼트에서 사용되는 플러그인 이름에 자동으로 접두사가 붙습니다. 만약 엘리먼트가 플러그인에 존재하지 않는 경우 메인 어플리케이션 폴더 안에서 검색됩니다. :

  echo $this->element('Contacts.helpbox');

만약 뷰가 플러그인의 일부이면 플러그인 이름을 생략 할 수 있습니다. 예를 들어, Contacts 플러그인 ContactsController 안에있는 경우 :

 echo $this->element('helpbox');
//and
 echo $this->element('Contacts.helpbox');

이들은 같은 엘리먼트의 렌더링 결과가 됩니다.

버전 2.1에서 변경 : $options[plugin] 옵션은 사용되지 않으며 대신 Plugin.element이 추가되었습니다.

독자적인 View 클래스 생성

데이터 뷰의 새로운 유형을 추가하려면 사용자 정의 뷰 클래스를 만들거나 어플리케이션에 사용자 정의 뷰의 렌더링 로직을 추가해야합니다. CakePHP의 뷰 클래스의 대부분의 구성 요소와 마찬가지로 몇 가지 규칙이 있습니다. :

  • 뷰 클래스는 App/View에 배치하십시오. 예) App/View/PdfView.php
  • 뷰 클래스 이름은 View를 클릭하십시오. 예) PdfView
  • 뷰 클래스 이름을 참조 할 때 View 접미사를 생략해야합니다. 예) $this-> viewClass = 'Pdf';
    또한 제대로 작동하도록 View를 상속합시다. :
 //in App/View/PdfView.php

 App::uses('View', 'View');
 class PdfView extends View {
     public function render($view = null $layout = null) {
        //custom logic here.
     }
 }

render 메소드를 대체하면 콘텐츠가 렌더링되는 방법을 완전히 제어 할 수 있습니다.

뷰 API

class View

뷰 메소드는 모든 뷰 요소 레이아웃 파일에서 액세스 할 수 있습니다. $this-> method()의 형식에서 호출하십시오.

View::set(string $var, mixed $value)

뷰는 컨트롤러 객체에서 볼 수있는 set()와 유사한 set() 메소드가 있습니다. 뷰 파일에서 set()를 사용하면 나중에 렌더링되는 레이아웃과 요소에 변수를 추가 할 수 있습니다. set()의 사용법에 대해 자세히 알고 싶다면, 컨트롤러 메소드를 참조해주세요.

뷰 파일은 다음과 같이 작성할 수 있습니다. :

  $this->set('activeMenuButton', 'posts');

그리고 레이아웃은 $activeMenuButton 변수를 사용할 수 ‘posts’라는 값입니다.

View::getVar(string $var)

$var라는 뷰 변수를 가져올 수 있습니다.

View::getVars()

현재 드로잉 범위에서 사용할 수있는 모든 뷰 변수의 목록을 가져옵니다. 변수 이름의 배열이 반환됩니다.

View::element(string $elementPath, array $data, array $options = array())

요소 또는 뷰의 일부를 그립니다. 더 자세히 알고 싶다면, 요소 를 참조하십시오.

View::uuid(string $object, mixed $url)

객체의 유형이나 URL에 따라 독특하고 무작위가 아닌 DOM ID를 생성합니다. 이 방법은 종종 JsHelper 같은 엘리먼트에 대한 독특한 DOM ID의 생성을 필요로하는 헬퍼에 의해 사용됩니다. :

$uuid = $this->uuid('form', array('controller'=> 'posts', 'action'=> 'index'));
//$uuid contains 'form0425fe3bad'

View::addScript(string $name, string $content)

내부의 스크립트 버퍼에 내용을 추가합니다. 이 버퍼는 레이아웃에서 $scripts_for_layout로 이용됩니다. 이 메소드는 javascript와 css를 직접 레이아웃에 추가 할 필요가있는 헬퍼를 만들 때 도움이됩니다. 레이아웃과 레이아웃 안의 요소에서 추가 된 스크립트는 $scripts_for_layout에 추가되지 않는다는 것을 명심하라. 이 방법은 대부분의 경우 JsHelper 과 HtmlHelper 도우미 헬퍼 중에서 사용됩니다.

버전 2.1에서 삭제 : 대신 뷰 블록을 사용 하는 기능을 사용하십시오.

View::blocks()

정의 된 모든 블록의 이름을 배열로 가져옵니다.

View::start($name)

뷰 블록에 대한 블록의 포착을 시작합니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.1에서 추가.

View::end()

가장 최근에 시작된 블록의 포착을 종료합니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.1에서 추가.

View::append($name, $content)

$name 블록에 추가합니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.1에서 추가.

View : prepend($name, $content)

$name 블록의 시작 부분에 추가합니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.3에서 추가.

View::startIfEmpty($name)

지정한 블록이 공백일 경우에만 블록을 시작합니다. 블록의 모든 컨텐츠를 캡처, 만약 블록이 이미 정의되어있는 경우는 파기됩니다.

버전 2.3에서 추가.

View::assign($name, $content)

블록의 값에 대입합니다. 이미 존재하고 있던 내용을 덮어 쓰게됩니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.1에서 추가.

View::fetch($name )

블록의 값을 가지고옵니다. 정의되지 않은 블록의 경우 ‘가 돌아갑니다. 뷰 블록을 사용 을 참조하십시오.

버전 2.1에서 추가.

View::extend($name )

현재보기/요소/레이아웃을 지정의 이름으로 상속합니다. 뷰의 상속 을 참조하십시오.

버전 2.1에서 추가.

property View::$layout

현재 뷰가 래핑 된 레이아웃을 설정합니다.

property View::$elementCache

요소를 캐시하기 위해 사용되는 캐시 설정입니다. 이 속성을 설정하는 자식 요소를 캐시하는 데 사용되는 기본 설정이 변경됩니다. 이 기본값은 element 메서드 ‘cache’옵션이 사용된다고 덮어 씁니다.

property View::$request

CakeRequest 의 인스턴스입니다. 현재 요청에 대한 정보에 액세스하기 위해이 인스턴스를 사용합니다.

property View::$output

뷰 파일 또는 배치 컨텐츠 중 하나의 뷰에서 마지막으로 렌더링 된 콘텐츠가 포함되어 있습니다.

버전 2.1에서 철폐 : 대신 $view-> Blocks-> get(‘content’); 을 사용하십시오.

property View::$Blocks

ViewBlock 의 인스턴스입니다. 뷰의 렌더링 중에 뷰 차단 기능을 제공하기 위해 사용되고 있습니다.

버전 2.1에서 추가.

'PHP' 카테고리의 다른 글

CakePHP - View - Json 과 XML 뷰  (0) 2015.05.13
CakePHP - 뷰 - 테마  (0) 2015.05.13
[CakePHP] Controller - Components  (0) 2015.05.08
[CakePHP] Controller - PageController  (0) 2015.05.08
[CakePHP] Controller - Scaffolding  (0) 2015.05.08
Posted by dewnine
,