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