2014-05-22 6 views
0

젠드 프레임 워크 1로 작업하면서, 현재 플레이스 홀더에 갇혀 있고 문제가 어디인지 정말로 알지 못합니다.젠드 프레임 워크 다른 작업에서 사용할 때 자리 표시 자 작동하지 않음

내 기본보기에서 자리 표시자를 사용하여 일부 내용을 렌더링 싶습니다

<div> 
<?= $this->placeholder('segment'); ?> 
</div> 

가 나는 페이지를 생성하는 주요 작용을 가지고 있지만, 나는이 자리에 대한 렌더링 설정하려는 ActionStack Helper를 사용하여 다른 액션. 그것은 불가능한 것 같습니다.

이 줄 :

$this->view->placeholder('segment')->set('XXXXXX'); 

는 기본 액션에 기록 할 때 예상되는 결과를 제공,하지만 난 ActionStack 콜 액션 내부에는 영향을주지 않습니다.

나는 새로운 액션 뷰와 액션 코드 내부에서 플레이스 홀더를 다루려고 노력했다. 아무 결과도, 나의 placeholder는 저에게 산출을주지 않는다.

실마리가 있습니까?

+0

더 자세히 설명해주십시오. '기본 동작'출력에서 렌더링하려는 '세그먼트'자리 표시 자의 내용을 설정하려면 '새 동작'을 원하십니까? –

+0

네, 정확히 제가 원하는 것입니다 –

+0

문제는 mainAction이 끝난 후에 렌더링되는 main.phtml보기 스크립트입니다. 따라서 MainAction이 완료되면 자리 표시자가 렌더링됩니다.ActionStack Helper의 기능인 mainAction 이후 다른 Action으로 변경. 응답을 보내지 않고 디스패치 프로세스를 끝내지 않고 대신 스택에서 다음 액션을 호출합니다. 어쩌면 mainAction에서 렌더링을 방지하고 대신 액션 스택에서 마지막 액션으로 뷰를 렌더링해야합니다. – Scriptlabs

답변

0

젠드 액션 스택 도우미에 몇 가지 정말 나쁜 어느 있습니다 (이 결과를 가질 수 있다면 내가 Zend_Layout를 사용하지 않는 프로젝트에 대한 작업, 나도 몰라) 이것이 내가이 헬퍼를 전혀 사용하지 말 것을 제안하는 이유입니다. 여기

내가 그것을 제안 이유에 대한 몇 가지 정보를 정기적으로 있습니다

http://www.rmauger.co.uk/2009/03/why-the-zend-framework-actionstack-is-evil/

당신은 정말 당신이 파견 과정에서 쓰기 보호 attribs와 부모 클래스를 사용하여 같은 다른 방법을 시도해야합니다.

당신이 원하는 것을 우리에게 말해 줄 수 있습니다. 우리는 당신의 문제를 다른 방법으로 해결하는 방법에 대한 몇 가지 다른 아이디어와 예를 들어 줄 수 있습니다.

내가 지금은 당신이 원하는 무엇을 생각하는 다른 솔루션

을 추가 할 것입니다 당신이보기 스크립트에서 사용할 수있는 변수에 어떤 종류의 정보를 구축하고있다.

컨트롤러 폴더가 있다고 가정 해 봅시다. 이 파견 과정에서 렌더링됩니다 당신의 main.phtml보기 스크립트에서 또는 기타보기 스크립트

class IndexController extends Zend_Controller_Action { 
    //add a protected attrib to your class that can be used to transfer and store data 
    protected $_segment = ''; 
    //you can also add setter and getter for this attribute   

    public function mainAction() { 
      //you do some things here 
      //$this->view->placeholder('segment')->set('xxxxx','test'); 
      //instead do this 
      $this->_segment= 'This is a'; 
      //build your action stack and add anotherAction to your stack 
    } 
    public function anotherAction() { 
      //$this->view->placeholder('segment')->set('xxxxx','test'); 
      //instead do the following 

      $this->_segment.= ' test'; 
    } 

    /** 
    * Is executed before a controller Action is being executed. 
    * 
    * @return 
    */ 
    public function preDispatch() { 

    } 

    /** 
    * Is executed after a controller Action is being executed. 
    * 
    * @return 
    */ 
    public function postDispatch() { 
     //set a view variable at the end of dipatching process 
     $this->view->segment = $this->_segment; 
    } 
} 

, 당신은 지금 다른 viwe 변수처럼 구성보기 변수를 사용할 수 있습니다.

echo $this->segment;