2014-08-27 137 views
0

我在網站上工作,我需要一個「小部件」,例如查看我的Zend框架2. 小部件的佈局應顯示服務器的運行狀態(這樣做)。ZF2部件/視圖佈局

(糾正我,如果這是不好的MVC風格) 我與

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

的話,我想用一個視圖助手來獲取操作的狀態建立一個控制器。 這是我卡住的地方。我知道如何創建viewHelper,但不知從哪裏開始從控制器操作獲取返回的視圖。 那麼我該如何做到這一點?

+0

糾正我,如果我錯了;你需要分派一個控制器動作並從結果視圖模型創建小部件? – AlexP 2014-08-27 19:10:47

+0

我認爲這應該工作:''返回$這個 - > getView() - >渲染( '應用程序/控制器/行動',陣列( 'PARAM'=> '值'));''沒試過從內部派遣視圖助手。 – 2014-08-27 19:15:09

+0

Gilberto Albino - >謝謝。重新閱讀有關MVC後,我發現我應該解析渲染()和使用服務來解析從數據庫等數據的感謝。 – KatsuoRyuu 2014-08-27 21:23:01

回答

2

這是我做的。這也應該做到這一點

在module.php正道

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

然後我在OperationalStatus的\查看\助手創建一個視圖助手

<?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控制器插件從內部派遣另一另一個控制器動作。

文檔說

有時,你可能想從匹配的控制器內派遣額外的控制器 - 例如,你可以使用這種方法來建立「部件化」內容。 Forward插件有助於實現這一點。

如果您已經有了這些操作,但希望將它們與其他人結合以構建聚合視圖,那麼這很有用。

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; 
    } 

由於$serverStatsWidget是派出控制器的結果,然後你可以只是使用echo添加到「主」視圖作爲一個孩子和渲染的結果。

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

部件化的內容將不會被更好地建立在視圖助手的頂部?我想,因爲你可以用自己的行動爲多種用途保持演示邏輯視圖中的一個輔助類抽象延長。轉發似乎在路由圖層上工作,除了抽象視圖之外,情況就是如此。 – 2014-08-27 19:45:59