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