ZF2模块(应用程序)无法初始化

时间:2014-01-26 21:32:46

标签: php zend-framework zend-framework2

我有100%正确的application.config.php:

return array(
    'modules' => array(
        'Application',
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{local,global}.php',
        ),
        'config_cache_enabled' => false,
        'cache_dir' => 'data/cache',
        'module_paths' => array(
            realpath(__DIR__ . '/../module'),
        ),
    )
);

然后我收到此错误:

  

模块(应用程序)无法初始化。

我已经跟踪了错误,看起来ModuleAutoloader并没有加载我的文件。

$this->paths数组是模块文件夹的右侧。我的模块文件位于module/Application/Module.php

它是一个命名空间的应用程序,类是Module。我无法解决问题所在。

<?php
namespace Application;

class Module
{
    /**
     * Module directory path
     *
     * @var string
     */
    protected $directory = null;

    /**
     * Module namespace
     *
     * @var string
     */
    protected $namespace = null;

    /**
     * Module configuration
     *
     * @var array
     */
    protected $config;

    /**
     * Get autoloader config
     *
     * @return array
     */
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                $this->getDir() . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    $this->getNamespace() => $this->getDir() . '/src/' . $this->getNamespace(),
                ),
            ),
        );
    }

    /**
     * Get module configuration
     *
     * @return array
     */
    public function getConfig()
    {
        if (empty($this->config)) {
            $config       = include $this->getDir() . '/config/module.config.php';
            $this->config = $config;
        }

        return $this->config;
    }

    /**
     * Get module dir
     *
     * @return string
     */
    protected function getDir()
    {
        return $this->directory;
    }

    /**
     * get module namespace
     *
     * @return string
     */
    protected function getNamespace()
    {
        return $this->namespace;
    }
}

2 个答案:

答案 0 :(得分:1)

尝试使用魔术常量而不是名称空间和目录的函数,例如

public function getAutoloaderConfig() {
    return array (
            'Zend\Loader\StandardAutoloader' => array (
                    'namespaces' => array (
                            __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__ 
                    ) 
            ) 
    );
}

在你的application.config.php中,你可以这样简化它:

'module_paths' => array(
        './module', 
    ),

如果这不起作用,您可以尝试对整个模块路径进行硬编码,以查看自动加载器是否有问题:

'module_paths' => array(
    './module',            
    'Application' => './module/Application/src/Application' 
),

答案 1 :(得分:0)

更改&#39; module_paths&#39;到:

'module_paths' => array(
    '../../module',
    '../../vendor',
)