我正在开发一个网站,我需要在我的Zend Framework 2布局中使用“小部件”视图。 小部件应该显示服务器的运行状态(已完成)。
(如果这是糟糕的MVC风格,请纠正我) 我用
构建了一个控制器function viewStatusAction(){
...
return $viewModel(array($vars))
}
然后我想使用viewHelper来获取动作的状态。 这就是我被困住的地方。我知道如何创建viewHelper,但不知道从控制器操作开始获取返回视图的位置。 那我该怎么做呢?
答案 0 :(得分:3)
您可以使用Zend\Mvc\Controller\Plugin\Forward
控制器插件从另一个内部发送另一个控制器操作。
文档说
有时,您可能希望从匹配的控制器中调度其他控制器 - 例如,您可以使用此方法来构建“widgetized”内容。 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 :(得分:2)
这就是我所做的。这也应该是正确的方法
在module.php中
public function getViewHelperConfig()
{
return array(
'factories' => array(
'statusWidget' => function ($sm) {
-- some service handling --
$statusWidget = new statusWidget($service);
return $statusWidget;
}
)
);
}
然后我在operationalStatus \ View \ Helper
中创建了一个viewHelper<?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));
}
}