Zend Debug未输出服务定位器


Zend Debug not outputting service locator

使用从service-manager检索的zend-db调试对象时遇到困难。

我有一个模块,在onBootstrap事件中有以下代码:

public function onBootstrap(MvcEvent $e)
    $eventManager = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);        
    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $translator->setLocale('Locale::acceptFromHttp($request->getServer('HTTP_ACCEPT_LANGUAGE')))
               ->setFallbackLocale(System::config('i18n/fallback_language'));   
    'Zend'Debug'Debug::dump($translator);        
    die();
}

我不太确定为什么,但出于某种原因,当我将翻译器传递给调试时,它会清空屏幕,执行会停止有趣的是,在这个阶段使用其他对象时,这似乎是一个问题

我不太清楚这里发生了什么。

我确实知道这些对象是应用程序工作时创建的有效对象,但由于某些原因,我无法从服务定位器调试转储任何内容

以下是我的ini设置列表,以防它与php设置有关。

Environment::iniSet('max_execution_time',0);
Environment::iniSet('display_errors','1');
Environment::iniSet('display_startup_errors',1);
Environment::iniSet('ignore_user_abort',1);
Environment::iniSet('date.timezone','America/New_York');
Environment::iniSet('mime_magic.magicfile',1);
Environment::iniSet('zend.ze1_compatibility_mode',0);  

感谢您的帮助。

我认为您应该考虑使用一些mvc事件来附加您的(翻译器)服务。例如;如果要在控制器内部或渲染期间进行转换,则获取MvcEvent::EVENT_DISPATCH("dispatch")事件或MvcEvent::EVENT_RENDER("nder"),并在触发该事件时附加转换器。

你可以这样做:

/**
 * @param EventInterface|MvcEvent $event
 */
public function onBootstrap(EventInterface $event)
{
    $application    = $event->getApplication();
    $eventManager   = $application->getEventManager();
    // Attach translator on dispatch Event
    $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'attachTranslator'));
}
/**
 * @param MvcEvent $event
 */
public function attachTranslator(MvcEvent $event)
{
    $application    = $event->getApplication();
    $serviceManager = $application->getServiceManager();
    $translator     = $serviceManager->get('translator');
    //do something with your translator
}

像这样,你要确保你只在需要的时候(在调度或渲染时)得到翻译器,并确保在得到它之前,所有的应用程序引导都已经完成。。。