我是Zf2新手,最近刚从zf1升级过来,在这个问题上需要帮助和建议。事实是:我正在研究医疗项目(这是升级到zf1版本)在一些控制器(页面)我需要有患者的信息和当前访问在侧边栏面板…我知道我是zf2的新手,但我不想做多余的事情,比如在每个动作中都有getvisiteService()和patientService()检索信息并将这些结果一遍又一遍地传递给视图。我想过一个插件,但我不得不再次从控制器传递到视图和增压我的视图与部分和占位符助手(grr!!)考虑策略和eventlistener,但我不知道这些是如何工作的,我需要将结果注入到局部。所以有一个简单或复杂的方法来实现这一点?提前感谢你的任何提示和代码将是感激的,抱歉我的英语很差,我说法语(这样一个典型的借口:))
在这里你可以使用很多方法,但是坚持你最初的问题,在布局模型中注入东西是很容易的,像这样:
Module.php
/**
* On bootstrap event
*
* @param 'Zend'Mvc'MvcEvent $e
*/
public function onBootstrap(MvcEvent $e)
{
// Inject something, like a nav into your Layout view model
$viewModel = $e->getViewModel(); // Layout View Model
$navigation= new ViewModel(array(
'username' => 'Bob' // Dynamically set some variables..
));
$navigation->setTemplate('navigation/mynav');
$viewModel->addChild($navigation, 'navigation');
}
如果你想的话,你也可以创建一个自定义视图助手来为你做这项工作
<?php
/**
* MyHelper.php
*/
namespace Application'View'Helper;
use Zend'View'Helper'AbstractHelper;
use Zend'ServiceManager'ServiceManagerAwareInterface;
use Zend'ServiceManager'ServiceManager;
class MyHelper extends AbstractHelper implements ServiceManagerAwareInterface
{
/**
* Invoke
*
* @return string
*/
public function __invoke()
{
// Dynamically build your nav or what ever.
$patientService = $this->getServiceManager()->get('PatientService');
return 'soemthing';
}
/**
* @var ServiceManager
*/
protected $serviceManager;
/**
* Retrieve service manager instance
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager instance
*
* @param ServiceManager $locator
* @return User
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
}