传递值以在Zend Framework 2中查看

Jho*_*rra 2 php controller zend-framework2

我正在尝试将现有的应用程序从Zend Framework 1转换为Zend Framework 2,我遇到了一些麻烦.

在原始应用程序中,我在控制器中有以下内容

function init()
{
    $this->initialize_values();
}
Run Code Online (Sandbox Code Playgroud)

我的所有控制器都扩展了一个基类,它具有该功能,如下所示.

protected function initialize_values()
{

    $this->_db = Zend_Registry::get('dbAdapter');
    $this->_current_user = new User(&$this->_db);

    $this->_auth = Zend_Auth::getInstance();
    if($this->_auth->hasIdentity())
    {
        $this->_current_user = unserialize($_SESSION['current_user']);
        $this->view->current_user = $this->_current_user;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经复制了除设置该视图值的最后一行之外的所有功能.

在我为ZF2找到的所有示例中,它们都返回了一个数组或一个视图模型.我没有看到将值传递给未附加到动作函数的视图的方法.

Eme*_*ing 9

那是因为你需要创建new ViewModel()并将其返回给调用脚本.根据您从控制器返回的内容,将调用相应的渲染器.

例如,如果我正在返回一个html块,我会使用

return new ViewModel(array('results' => $results));
Run Code Online (Sandbox Code Playgroud)

在我的控制器动作结束时.但是,如果我想提供JSON输出,我会返回

return new JsonModel($results);
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以准备视图模型并将其存储在受保护的变量中,并向其添加变量,如下所示:

// in your constructor
$this->_view = new ViewModel();

// in your initialize values method
$this->_view->setVariable($name, $value);
Run Code Online (Sandbox Code Playgroud)

然后准备输出时:

// in your controller action
return $this->_view;
Run Code Online (Sandbox Code Playgroud)