2014-08-27 99 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