CakePHP- View - Helper

PHP 2015. 5. 14. 15:48

헬퍼

헬퍼는 프리젠 테이션 레이어를위한 구성 요소와 같은 클래스입니다. 많은 뷰나 엘리먼트, 레이아웃에서 공유되는 표시 로직을 포함하고 있습니다. 이 장에서는 헬퍼를 만드는 방법과 CakePHP의 핵심 헬퍼에있는 기본적인 작업의 개요를 설명합니다.

CakePHP는 뷰의 생성에 도움이되는 몇 가지 특징적인 헬퍼가 있습니다. 그들은 올바른 형식의 마크업(양식 포함), 텍스트, 시간, 숫자 모양에 도움이 되거나, Ajax 기능을 한층 빠르게 하기도합니다. CakePHP 헬퍼에 대한 자세한 정보는 코어 라이브러리의 헬퍼를 참조.

헬퍼 설정 및 사용

CakePHP에서 헬퍼를 사용하려면 컨트롤러에 인식시킬 필요가 있습니다. 각 컨트롤러는 $helpers 속성을 가지고 있으며, 그 속성은 뷰에서 사용할 수있는 헬퍼 목록을 유지하고 있습니다. 뷰에서 헬퍼를 사용하려면 헬퍼의 이름을 컨트롤러의 $helpers 배열에 추가하십시오. :

  class BakeriesController extends AppController {
     public $helpers = array ( 'Form', 'Html', 'Js', 'Time');
 }

플러그인에서 헬퍼를 추가하려면 CakePHP의 다양한 장소에서 사용되고있는 DebugKit.Toolbar의 표기법과 같은 플러그인 기법을 사용합니다. :

  class BakeriesController extends AppController {
     public $helpers = array ( 'Blog.Comment');
 }

어떤 액션 동안만 헬퍼를 추가 할 수 있습니다. 즉, 어떤 헬퍼의 이용을 특정 컨트롤러 액션에 한정하여 동일한 컨트롤러의 다른 액션에서는 사용할 수 없도록 할 수 있습니다. 이것은 컨트롤러가 정리 된 상태를 유지하는 데 도움이 될뿐만 아니라 또한 헬퍼를 사용하지 않는 다른 액션의 처리 비용을 절약 할 수 있습니다. :

  class BakeriesController extends AppController {
     public function bake () {
         $this->helpers[] = 'Time';
     }
     public function mix () {
         // 여기에 Time 헬퍼는로드되지 않기 때문에 사용할 수 없습니다
     }
 }

만약 모든 컨트롤러에서 헬퍼를 활성화 할 필요가있는 경우 헬퍼 이름을 /app/Controller/AppController.php (없는 경우 작성하십시오)의 $helpers 배열에 추가하십시오. 기본 Html 헬퍼와 Form 헬퍼도 잊지 말고 읽어주세요. :

  class AppController extends Controller {
     public $helpers = array('Form', 'Html', 'Js', 'Time');
 }

헬퍼는 옵션을 전달할 수 있습니다. 이 옵션은 속성 값을 설정하거나 헬퍼의 동작을 바꾸기 위하여 사용할 수 있습니다. :

  class AwesomeHelper extends AppHelper {
     public function __construct(View $view, $settings = array()) {
         parent::__construct ($view $settings);
         debug ($settings);
     }
 }

 class AwesomeController extends AppController {
     public $helpers = array('Awesome'=> array ( 'option1'=> 'value1'));
 }

모든 헬퍼 공통적으로 사용할 수있는 설정에 className 옵션이 있습니다. 이 옵션을 설정하면 뷰에 별칭의 헬퍼를 만들 수 있습니다. 이 기능은 $this->Html 및 기타 공통 헬퍼 참조를 자체 구현으로 대체 할 때 유용합니다. :

  // app/Controller/PostsController.php
 class PostsController extends AppController {
     public $helpers = array (
         'Html'=> array (
             'className'=> 'MyHtml'
         )
     );
 }

 // app/View/Helper/MyHtmlHelper.php
 App::uses ( 'HtmlHelper', 'View/Helper');
 class MyHtmlHelper extends HtmlHelper {
     // 코어 HtmlHelper를 무시하도록 코드를 추가하십시오
 }

위의 예에서는 뷰에서 MyHtmlHelper가 $this->Html 별칭이 되어있습니다.

별칭이 붙은 헬퍼는 어디에서 사용되고 있었다고 해도 그 인스턴스를 대체합니다. 그것에는 다른 헬퍼 내부도 포함되어 있습니다.

 

Html이나 Session의 별칭을 붙인 헬퍼는 코어 PagesController에서 사용하면 잘 움직이지 않을 것입니다. 따라서 lib/Cake/Controller/PagesController.phpapp/Controller/폴더에 복사하는 것이 좋습니다.

헬퍼를 설정하여 선언적으로 헬퍼를 설정할 수 있게되었고 또한 컨트롤러 액션 밖으로 설정 로직을 둘 수 있습니다. 만약 클래스 선언의 일부에 포함 할 수없는 설정 항목이있는 경우 컨트롤러 beforeRender 콜백에서 그들을 설정할 수 있습니다. :

  class PostsController extends AppController {
     public function beforeRender () {
         parent::beforeRender ();
         $this->helpers['CustomStuff'] = $this ->_getCustomStuffSettings ();
     }
 }

헬퍼를 사용

컨트롤러에서 어떤 헬퍼가 사용하고 싶은지를 한번 설정하고 나면 각 헬퍼 뷰에서 공용 속성처럼 처리 할 수있습니다. 예를 들어 HtmlHelper 를 사용하고 있다고합니다. 이 경우 다음과 같이 헬퍼에 액세스 할 수 있습니다. :

  echo $this->Html->css('styles');

위의 예에서는 HtmlHelper의 css 메서드를 호출합니다. 로드 된 헬퍼이면 $this ->{$helperName}의 형식으로 액세스 할 수 있습니다. 뷰 내에서 동적으로 헬퍼를 로드 할 필요를 느낄때가 올지도 모릅다. 그때는 뷰의 HelperCollection를 사용하여 이렇게 할 수 있습니다. :

  $mediaHelper = $this->Helpers->load('Media', $mediaSettings);

HelperCollection는 컬렉션 이며, CakePHP의 다른 부분에서도 사용되고있는 컬렉션 API를 지원하고 있습니다.

콜백 메소드

헬퍼 뷰의 렌더링 공정을 늘리는 것 같은 몇 가지 콜백을 특징으로하고 있습니다. 더 많은 정보를 원한다면, 헬퍼 API 와 컬렉션 문서를 참조하십시오.

헬퍼를 만들기

만약 코어 헬퍼 (또는 GitHub와 Bakery에있는 헬퍼)에서 원하는 것을 할 수 없다고해도 헬퍼를 만드는 것은 간단하기 때문에 괜찮습니다.

여기에서 응용 프로그램의 다양한 장소에서 필요로하는 CSS 스타일 링크를 출력하는 헬퍼를 만들고 싶었다고하자. CakePHP의 기존 헬퍼 구조 논리를 맞추기 위해서는/app/View/Helper에 새로운 클래스를 작성해야합니다. 앞으로 만들 헬퍼 LinkHelper라고 부르기로하자. 실제 PHP 클래스 파일이 될 것입니다. :

 /* /app/View/Helper/LinkHelper.php * /
 App::uses('AppHelper', 'View/Helper');

 class LinkHelper extends AppHelper {
     public function makeEdit ($title, $url) {
         // 특별히 성형된 링크를 만들기위한 로직은 여기 ...
     }
 }

헬퍼 AppHelper 또는 Helper 를 상속하거나 헬퍼 API 에 정의 된 모든 콜백을 구현해야합니다.

다른 헬퍼를로드

다른 헬퍼에 이미 존재하는 기능을 사용하고 싶을지도 모릅니다. 이 경우 $helpers 배열에 사용하고 싶은 헬퍼를 명시하여 제공합니다. 형식은 컨트롤러에서 지정하는 것과 같이하십시오. :

 /* /app/View/Helper/LinkHelper.php (다른 헬퍼를 사용하는) * /
 App::uses ( 'AppHelper', 'View/Helper');

 class LinkHelper extends AppHelper {
     public $helpers = array ( 'Html');

     public function makeEdit ($title, $url) {
         // 성형 된 데이터를 출력하기 위해
         // HTML 헬퍼를 사용 :

         $link = $this->Html->link($title, $url, array ('class'=> 'edit'));

         return '<div class = "editOuter">' . $link . '</ div>';
     }
 }

자작한 헬퍼 사용

일단 헬퍼를 만들어 /app/View/Helper/ 에 배치하면 컨트롤러에서 $helpers 라는 특별한 변수를 사용하는 것으로 그 헬퍼를 로드 할 수 있습니다. :

  class PostsController extends AppController {
     public $helpers = array('Link');
 }

일단 컨트롤러가 이 새로운 클래스를 인식하면 헬퍼의 이름을 따서 명명 된 개체에 액세스하는 것으로, 보기 중에서이 헬퍼를 사용할 수있게합니다. :

 <! - 새로운 헬퍼를 사용하여 링크 만들기 ->
 <? php echo $this->Link->makeEdit ( 'Change this Recipe', '/ recipes/edit/5');?>

모든 헬퍼를위한 기능을 만들기

모든 헬퍼는 특별한 클래스 AppHelper를(모델이 AppModel을 상속 컨트롤러가 AppController를 상속하는 것과 같이) 상속합니다. 모든 헬퍼에서 사용할 수있는 기능을 만들려면 /app/View/Helper/AppHelper.php를 작성하십시오. :

 App::uses ( 'Helper', 'View');

 class AppHelper extends Helper {
     public function customMethod () {
     }
 }

헬퍼 API

class Helper

헬퍼의 base class입니다. 일부 유틸리티 메소드와 다른 헬퍼의로드 기능을 제공합니다.

Helper::webroot($file)

파일 이름을 애플리케이션의 webroot에서 해결합니다. 테마가 활성화되어 현재 테마의 webroot에 파일이 존재하는 경우, 테마 파일의 경로가 반환됩니다.

Helper::url($url, $full = false)

HTML이 이스케이프 된 URL을 생성하고 Router::url()에게 위임합니다.

Helper::value($options = array(), $field = null, $key = ‘value’)

주어진 input 이름에 해당하는 값을 가져옵니다.

Helper::domId($options = null, $id = ‘id’)

현재 선택되어있는 필드에 해당하는 카멜 케이스의 id 값을 생성합니다. AppHelper에서 이 메소드를 덮어 써서 CakePHP가 ID 속성을 생성하는 방법을 변경할 수 있습니다.

콜백

Helper::beforeRenderFile($viewFile)

각 뷰 파일이 렌더링되기 전에 호출됩니다. 여기에는 요소 뷰 상위 뷰 레이아웃을 포함합니다.

Helper::afterRenderFile($viewFile $content)

각 뷰 파일이 렌더링 된 후에 호출됩니다. 여기에는 엘리먼트, 뷰, 상위 뷰, 레이아웃을 포함합니다. 콜백은 렌더링 된 콘텐츠가 브라우저에 어떻게 렌더링되는지를 바꾸기 위하여 $content를 변경하여 반환 할 수 있습니다.

Helper::beforeRender($viewFile)

beforeRender 메서드는 컨트롤러 beforeRender 메소드의 호출후에 호출됩니다. 그렇지만 컨트롤러가 뷰와 레이아웃을 그리기 전 입니다. 렌더링되는 파일을 인수로 사용합니다.

Helper::afterRender($viewFile)

뷰가 렌더링 된 후에 호출됩니다. 그러나 레이아웃 그리기 시작 전.

Helper::beforeLayout ($layoutFile)

레이아웃 렌더링 시작 전에 호출됩니다. 레이아웃 파일 이름을 인수로 사용합니다.

Helper::afterLayout ($layoutFile)
레이아웃의 렌어링 완료후에 불려집니다. 레이아웃 파일 이름을 인수로 사용합니다.

코어 헬퍼

캐시 헬퍼

뷰 콘텐츠를 캐시하는 핵심 의해 사용됩니다.

FormHelper

HTML 양식과 자동 생성되는 양식 요소를 만듭니다. 또한 검증 문제를 처리합니다.

HtmlHelper

정형식의 마크 업을 만들기위한 편리한 메소드입니다. 이미지, 링크, 헤더 태그 등.

JsHelper

다양한 Javascript 라이브러리와 호환되는 Javascript를 작성하는 데 사용됩니다.

NumberHelper

숫자 및 통화를 성형합니다.

Paginator

모델 데이터의 페이지 전환 및 정렬.

RSS

RSS 피드 및 XML 데이터를 출력하는 편리한 메소드입니다.

세션 헬퍼

보기에서 세션 값을 읽어 들여 액세스합니다.

TextHelper

스마트 링크, 하이라이트, 워드 스마트 잘리지.

Time 헬퍼

근방 검출 (내년 여부?)와 근사한 문자열 성형 (Today, 10:30 am)과 시간대 변환을합니다.

'PHP' 카테고리의 다른 글

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