1

젠드 프레임 워크와 MVC를 처음 접했을 때 새로운 조언이 필요합니다. 우리는 몇 가지 사용자 정보, 계정 구성 등을 얻을 수있는 몇 가지 메소드가있는 기본 컨트롤러 클래스를 가지고 있습니다.내 젠드 뷰 도우미 작성법 이해하기

그래서 여러 컨트롤러 액션에서 코드를 작성하기 위해 일부 메소드를 사용하고 있습니다. 이 코드를 복제하지 말고,이 코드를 주로 컨트롤러 외부와 뷰 도우미에서 가져 와서 일부 JavaScript를 출력하는 것이 좋습니다. 그래서 컨트롤러의 코드는 다음과 같습니다

$obj= new SomeModel ($this->_getModelConfig()); 
$states = $obj->fetchByUser ($this->user->getId()); 
//Fair amount of logic here using this result to prepare some javascript that should be sent to the view... 

(가)이 $ - $ this-이> 사용자 -> 내가 컨트롤러에서 할 수있는 일이, 지금은 내 질문에 무엇을()> _ getModelConfig이며 getId 이 코드를 컨트롤러 밖으로 옮기면 해당 정보를보기 도우미로 전달하는 가장 좋은 방법은 무엇입니까?

그냥 컨트롤러에서 이러한 메서드를 호출하고 결과를 뷰에 저장하고 도우미가 뷰어에서 해당 메서드를 선택하도록해야합니까?

내가 생각한 또 다른 옵션은 도우미에 매개 변수를 추가하고 매개 변수가 전달되면 도우미 및 반환의 속성에 저장하고 매개 변수를 전달하지 않고 호출 할 때 작업을 수행하는 것입니다. 그래서 그 결과는 다음과 같습니다 컨트롤러에서

를 :보기에서

$this->view->myHelper($this->user->getId(), $this->_getModelConfig()); 

:

<?= $this->myHelper(); %> 

도우미 :

class Zend_View_Helper_MyHelper extends Zend_View_Helper_Abstract 
{ 
    public $userId = ''; 
    public $config = null; 
    public function myHelper ($userId = null, $config = null) 
    { 
     if ($userId) { 
      $this->userId = $userId; 
      $this->config = $config; 
     } else { 
      //do the work 
      $obj = new SomeModel($this->config); 
      $states = $obj->fetchByUser($this->userId); 
      //do the work here 
     } 
     return $this; 
    } 
} 

가 어떤 조언을 환영합니다!

답변

1

"$ this-> myHelper(); %>"에있는 ASP 스타일의 끝 태그는 모델에 논리를 유지하는 것이 더 바람직하며 통화하는 데 컨트롤러를 사용하는 것이 좋습니다 모델, 결과를 얻고보기 위해보기에 침을 뱉어 라.

내가 할 수있는 것은 단순히 값의 묶음을보기에 전달하고 싶다면 연관 배열로 채우고 보낼 수 있습니다. 당신이 당신의 일을해서는 안 어쨌든

...

"논리의 // 상당한 양의 여기보기로 전송해야 할 몇 가지 자바 스크립트 ... 준비하기 위해이 결과를 사용하여"

부분을 컨트롤러, 나는 그 논리 물건을 당신을 위해 새로운 모델을 만들기 위해 조언을하고 컨트롤러에서 모델을 호출하여 필요한 인수를 전달한 다음 그 결과를보기로 내뱉습니다.

+1

내 질문 컨트롤러에서 그 코드를 가지고 정확하게이다. 내가하고 싶지 않은 일은 내 모델 출력

0

가장 좋은 방법은 컨트롤러에서 모델을 통해 데이터를 가져온 다음보기로 전달하는 것입니다. 그러나보기 부분을 반향시키기 위해 사용자 정의 도우미가 실제로 필요한 경우, 사용자가 수행하려는 작업을 정확하게 말하면 알 수 있습니다.

이미이 논리를 도우미로 사용하고 있다면 뷰 myhelper ($ this-> params)에서 매개 변수를 전달하십시오. ?>

당신도이 방법을 살펴 할 수 있습니다 :

// In your view to put javascript in the header 
// You can loop trought your data and then use it to generate the javascript. 
<?php $this->headScript()->captureStart(); ?> 
    $().ready(function(){ 
     $('#slideshow').cycle({ 
      fx:  'fade', 
      speed: 1000, 
      timeout: 6500, 
      pager: '#nav' 
     }); 
    }); 
<?php $this->headScript()->captureEnd() ?> 
관련 문제