您需要做的就是将所有视图变量存储到一个数组中并返回该数组。除非您需要其他功能,否则您不需要任何类或策略,例如 ViewModel 或 JsonModel。
因此,只要控制器中的 Action 函数返回数组,就可以将这些值传递给视图。
像这样:
public function indexAction()
{
$current_user = $this->getSession();
return array(
'current_user' => $current_user
);
}
要真正使用 ZF2,请使用 ServiceManagers 和 ServiceLocators 而不是 Zend_Registry。您可以通过创建一个名为 getServiceConfig() 的函数在 Module.php 文件中分配服务管理器(如果它尚不存在)。它应该看起来有点像这样。
public function getServiceConfig()
{
'factories' => array(
'session' => function ($sm){
return new Session($sm->get('Zend/Db/Adapter/Adapter'));
}
)
}
我还会考虑通过带有 service_manager 的全局配置/自动加载文件中的 database.local.php 文件添加您的数据库适配器。
像这样:
<?php
$Params = array(
'database' => 'YOUR DATABASE',
'username' => 'YOUR USERNAME',
'password' => 'YOUR PASSWORD',
'hostname' => 'YOUR HOSTNAME',
);
return array(
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => function ($sm) use ($Params) {
return new Zend\Db\Adapter\Adapter(array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname='.$Params['database'].';host='.$Params['hostname'],
'database' => $Params['database'],
'username' => $Params['username'],
'password' => $Params['password'],
'hostname' => $Params['hostname'],
));
},
毕竟,您可以简单地获取您的 Session 类或任何您将使用的简单函数,该函数将使用 Controller 中的 ServiceLocator。
protected $session;
public function getSession()
{
if($this->session == null)
{
$sl = $this->getServiceLocator();
$this->session = $sl->get('session');
}
return $this->session;
}