Zend Debug未输出服务定位器

时间:2016-04-17 01:42:09

标签: php zend-framework zend-framework2

我使用从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);  

任何帮助表示感谢。

1 个答案:

答案 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
}

像这样你确保只在你需要它时(在发送或渲染时)获得翻译器,并确保在你获得它之前所有的应用程序引导都已完成......