zf2 mvc事件监听器或策略

时间:2013-03-19 22:31:41

标签: php zend-framework zend-framework2 partial-views event-listener

我是Zf2的新手,我最近从zf1升级,需要有关此问题的帮助和建议。 这里的事实是: 我正在研究某个控制器(页面)中的医疗项目(这是对zf1版本的升级)我需要患者的信息和当前的访问侧边栏面板...... 我知道我是zf2的新手,但我不想做多余的事情,比如在每一个动作中 getvisiteService() patientService()检索信息并传递这些信息结果一遍又一遍地观察。 我想过一个插件,但我又要从控制器传递到视图,并用partials和占位符帮助器增加我的视图(grr !!!) 想想策略 eventlistener ,但我不知道这些是如何工作的,我需要将结果注入局部。 那么有一种简单和/或复杂的方法来实现这一目标吗?提前谢谢任何提示和代码将不胜感激,对不起我的英语不好我说法语(这是一个典型的借口:))

1 个答案:

答案 0 :(得分:3)

你可以在这里使用大量的方法,但坚持你原来的问题,在你的布局模型中注入东西很容易,如下所示:

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;
    }
}