событие zf2 mvc-слушатель или стратегия


Я новичок в Zf2, недавно обновился с zf1 и нуждаюсь в помощи и Совете по этой проблеме. Вот факт : Я работаю над медицинским проектом (который является обновлением до версии zf1) в каком-то контроллере (страница) мне нужно иметь информацию о пациенте и текущее посещение в боковой панели... Я знаю, что я новичок в zf2, но я не хочу делать лишние вещи, такие как иметь в каждом действии getvisiteService () и patientService () получение информации и передача этих результатов чтобы смотреть снова и снова. Я думал о плагине, но опять же я должен перейти от контроллера к просмотру и перегружать мой вид с помощью partials и placeholder helper (grr!!!) Думаю о стратегии и eventlistener, но я не знаю, как они работают, и мне нужно ввести результат в частичный. Итак, есть простой и / или сложный способ достичь этого? Заранее благодарю вас за любую подсказку и код буду признателен и извините за мой плохой английский я говорю по-французски (такая типичная отговорка :) )

1 3

1 ответ:

Существует масса подходов, которые вы можете использовать здесь, но придерживаясь вашего первоначального вопроса, довольно легко ввести вещи в вашу модель макета, примерно так:

Модуль

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