2010-07-30 10 views
0

나는 다음과 같은 몇 가지 입력하고 싶은 :가장 좋은 방법은

  1. 나는 체계적으로 렌더링 할 몇 가지 의견을 싶습니다을 (난에서 렌더링> $ this-를 호출 할 수 있습니다 )이 컨트롤러는 어떤 컨트롤러/액션이 실행되는지에 관계없이 이러한 뷰에 대한 레이아웃을 제공합니다.
  2. 그러나 이러한보기에 사용되는 콘텐츠는 동적으로 생성되는 동일한 데이터를 기반으로하며 그 뒤에 숨겨진 코드는 매우 복잡하므로 명백한 최적화/성능 문제를 해결하기 위해 뷰 내부에 로직을 넣을 수 없습니다.
  3. 내가 사용할 수있는 $이 -> _ 헬퍼> actionStack 뷰에 대한 데이터가 있지만 준비 될 나는 기존의 컨트롤러
  4. 을 수정하지 않고 수행하고자하는 다른 컨트롤러를 호출하는 각 컨트롤러에

나는 것 부트 스트랩에 뭔가를 넣으려고했는데, 원하는 것은 내 응용 프로그램과 공통점이 있기 때문에 무엇을해야할지 모르겠습니다.

답변

1

이것이 바로 View Helpers입니다.
보기 도우미에서 모델 또는 서비스 계층을 통해 데이터를 가져 와서 출력용으로 준비 할 수 있습니다.

<?php 
class View_Helper_Foobar extends Zend_View_Helper_Abstract 
{ 
    protected $_data; 

    public function foobar() 
    { 
     if (null !== $this->_data) { 
      $this->_data = some_expensive_data_getter(); 
     } 

     return $this; 
    } 

    public function __toString() 
    { 
     return $this->view->partial('foobar.phtml', array('data' => $this->_data)); 
    } 
} 
+0

는 실제로 그 그러나이 관계없이 컨트롤러/액션의 필요없이 실행, 어떻게 여러 뷰의 데이터를 한 번 준비하는보기로 데이터를 전송하지만, 방법에 대해없는 내 질문을 해결하지 않습니다 위해 그들이 무엇을 (가능하다면) 위에서 언급 한 컨트롤러를 수정하십시오. – Max

+0

내 대답이 약간 확장되었습니다. some_expensive_data_getter()는 한 번만 호출되어야합니다. –

+0

@ user359650'foobar ($ data)'를 사용하여 뷰에서 데이터를 전달할 수 있습니다. – takeshin