2014-08-27 2 views
0

젠드 프레임 워크 2의 레이아웃에서 뷰와 같은 "위젯"이 필요한 웹 사이트에서 작업 중입니다. 위젯에 서버의 작동 상태가 표시되어야합니다 (완료되었습니다).레이아웃의 ZF2 위젯/뷰

(이 나쁜 MVC 스타일 인 경우 정정 해줘) 는 내가

function viewStatusAction(){ 
    ... 
    return $viewModel(array($vars)) 
} 

그때 내가 작업의 상태를 얻을 수있는 viewHelper를 사용하려면와 컨트롤러를 구축 할 수 있습니다. 여기가 내가 붙어 있습니다. viewHelper를 만드는 방법을 알고 있지만 컨트롤러 동작에서 반환 된 뷰를 가져올 위치는 아닙니다. 그래서 어떻게해야합니까?

+0

내가 틀렸다면 정정 해줘; 컨트롤러 액션을 디스패치하고 결과 뷰 모델에서 위젯을 생성해야합니까? – AlexP

+0

나는 이것이 작동해야한다고 생각한다 :'return $ this-> getView() -> render ('application/controller/action', array ('param'=> 'value'));'' 보기 도우미. –

+0

Gilberto Albino -> 감사합니다. MVC에 대해 다시 읽은 후 나는 render()를 분석하고 데이터베이스 등의 데이터를 파싱하는 데 서비스를 사용해야한다는 것을 알게되었습니다. – KatsuoRyuu

답변

2

다음은 내가 한 일입니다. 이것은 또한 내가는 OperationalStatus \보기 \ 도우미에 viewHelper을 만든 다음

public function getViewHelperConfig() 
{ 
    return array(
     'factories' => array(
      'statusWidget' => function ($sm) { 
       -- some service handling -- 
       $statusWidget = new statusWidget($service); 
       return $statusWidget; 
      } 
     ) 
    ); 
} 

module.php에 그것을

을 할 수있는 올바른 방법으로해야한다

<?php 
namespace operationalStatus\View\Helper; 

use Zend\View\Helper\AbstractHelper; 

class statusWidget extends AbstractHelper 
{ 

    public function __construct($service){ 
     $this->service = $service 
    } 

    public function __invoke() 
    { 
     -- collect data from the service -- 

     return $this->getView()->render('operational-status/widget/status', array('operation' => $status)); 
    } 

} 
2

Zend\Mvc\Controller\Plugin\Forward 컨트롤러 플러그인을 사용하여 다른 컨트롤러 조치를 다른 컨트롤러 조치에서 파견 할 수 있습니다.

워드 프로세서를 사용하면 일치하는 컨트롤러 내에서 추가 컨트롤러를 파견 할 수 있습니다, 때때로

말을 - 예를 들어, 당신은 "에서는 widgetized"컨텐츠를 구축하기 위해이 방법을 사용할 수 있습니다. Forward 플러그인을 사용하면이 기능을 사용할 수 있습니다.

이러한 작업이 이미 있지만 다른보기와 결합하여 통합보기를 작성하려는 경우 유용합니다. $serverStatsWidget으로

use Zend\View\Model\ViewModel; 

class AdminController extends AbstractActionController 
{ 
    public function adminDashboardAction() 
    { 
     $view = new ViewModel(); 
     $view->setTemplate('admin/admin/dashboard'); 

     //.. 
     $serverStatsWidget = $this->forward()->dispatch('ServiceModule\Controller\Server', array(
      'action' => 'status', 
      'foo' => 'bar', 
     )); 
     if ($serverStatsWidget instanceof ViewModel) { 

      $view->addChild($serverStatsWidget, 'serviceStats'); 
     } 

     return $view; 
    } 

는 파견 컨트롤러의 결과, 당신은 그럼 그냥 echo를 사용하여 결과를 자식으로 '주'보기에 추가하고 렌더링 할 수 있습니다.

// admin/admin/dashboard.phtml 
echo $this->serviceStats; 
+1

widgetized 내용이 View Helpers 위에 잘 빌드되지 않습니까? 뷰의 프리젠 테이션 로직을 헬퍼 클래스로 추상화 된 상태로 유지하면서 여러 가지 용도로 액션 자체를 사용할 수 있기 때문에 나는 생각한다. 전달은 추상적 인보기가 아닌 라우팅 레이어에서 작동하는 것처럼 보입니다. –