我使用从zend-db
检索到的service-manager
来调试对象时遇到了困难。
我在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);
任何帮助表示感谢。
答案 0 :(得分:0)
我认为您应该考虑使用某些mvc事件附加您的(翻译)服务。所以例如;您想在控制器内或在渲染过程中进行翻译,然后获取MvcEvent::EVENT_DISPATCH
(' dispatch')事件或MvcEvent::EVENT_RENDER
('渲染')事件并附加触发该事件时的翻译。
你可以这样做:
/**
* @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
}
像这样你确保只在你需要它时(在发送或渲染时)获得翻译器,并确保在你获得它之前所有的应用程序引导都已完成......