ZfcTwig不加载配置并在启动时失败

嗨,我对ZF2比较新,所以这可能是我犯的一个非常简单的错误。

问题

当加载ZfcTwig模块时,我得到一个异常

致命错误:在/ www / ZendFramework2 / library / Zend / ServiceManager / ServiceManager中,带有消息“Zend ServiceManager ServiceManager :: get无法获取或为Twig_Environment创建实例”的未捕获异常'Zend ServiceManager Exception ServiceNotFoundException' 555行的php

此异常引发到ZfcTwigModule.phponBootstrap函数中:

<?php
class Module implements
  BootstrapListenerInterface,
  ConfigProviderInterface
{
  public function onBootstrap(EventInterface $e)
  { 
    /** @var ZendMvcMvcEvent $e*/
    $application    = $e->getApplication();
    $serviceManager = $application->getServiceManager();
    $environment    = $serviceManager->get('Twig_Environment'); // throws the exception
    //...
  }
  public function getConfig(){ return [/*...*/]; } // never called
}

我没有得到的是为什么在加载配置之前调用bootstrap。 'Twig_Environment'服务在ZfcTwig模块的配置中进行配置,但是在调用onBootstrap时,该配置尚未加载。

建立

ZF2加载器通过ZF2_PATH环境变量。 不使用作曲家自动装载机。

application.config.php我设置了一个额外的模块路径'/global/vendor'给我的可重用模块系统库。 我没有使用项目本地供应商文件夹。

'/global/vendor/ZfcTwig'我加载模块ZfcTwig (链接)以获得ZF2中的Twig模板引擎支持。

由于这依赖于树枝库,我将树枝放到'/global/vendor/twig'

要为ZfcTwig模块和树枝库类启用自动加载,我通过实现AutoloaderProviderInterface并为枝和ZfcTwig添加了配置,更改了ZfcTwig的Module.php。

<?php
class Module implements
    BootstrapListenerInterface,
    AutoloaderProviderInterface,
    ConfigProviderInterface
{
    /**
     * Autoloading the twig library and this modules classes
     * @return array
     */
    public function getAutoloaderConfig()
    {
        $pathToTwigLib = dirname(dirname(dirname(__DIR__))) . '/twig/twig/lib/Twig';
        return array(
            'ZendLoaderStandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__,
                ),
                'prefixes' => array(
                    'Twig_' => $pathToTwigLib,
                ),
            ),
        );
    }

application.config.php我加载模块['Application','twig','ZfcTwig']

自动加载小枝正在工作(至少我可以在ZfcTwig和其他控制器的引导中使用new实例化Twig_Environment )。


已启用配置缓存

问题正是我在想我自己的地方。 配置需要在自举完成之前加载。 然而这正是ZF2所做的,除非像我一样,你已经启用了配置缓存。

<?php
// config/applicaiton.config.php
return array(
  'module_listener_options' => array(
    // this prevents the call to getConfig on Modules
    // that implement the ConfigProviderInterface
    // default: false
    'config_cache_enabled' => true, 
  )
);
链接地址: http://www.djcxy.com/p/67781.html

上一篇: ZfcTwig is not loading config and fails in bootstrap

下一篇: ZF2 config from module with no controllers