模块(专辑)无法初始化zf2教程

时间:2014-07-07 02:54:01

标签: php zend-framework2

我正在研究zend框架2教程应用程序。我按如下方式设置了我的相册模块目录:

enter image description here

当我启动MAMP服务器Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (Album) could not be initialized.'

时,我遇到了错误

如果我从以下代码(Album中)注释掉/config/application.config.php模块:

'modules' => array(
    'Application',
    'Album',
),

我到了骨架应用程序主页。 这是我的/module/Album/Module.php代码:

namespace Album;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Album\Model\Album;
use Album\Model\AlbumTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface {

public function getAutoloaderConfig() {
    return array(
        ’Zend\Loader\ClassMapAutoloader’ => array(
            __DIR__ . ’/autoload_classmap.php’,
        ),
        ’Zend\Loader\StandardAutoloader’ => array( ’namespaces’ => array(
            __NAMESPACE__ => __DIR__ . ’/src/’ . __NAMESPACE__,
            ),
        ), 
    );
}

public function getConfig() {
    return include __DIR__ . ’/config/module.config.php’; 
}

public function getServiceConfig() {
    return array(
        ’factories’ => array(
            ’Album\Model\AlbumTable’ => function($sm) { 
                $tableGateway = $sm->get(’AlbumTableGateway’); 
                $table = new AlbumTable($tableGateway);
                return $table;
            },
            ’AlbumTableGateway’ => function ($sm) {
                $dbAdapter = $sm->get(’Zend\Db\Adapter\Adapter’);
                $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Album());
                return new TableGateway(’album’, $dbAdapter, null, $resultSetPrototype);
            }, 
        ),
    ); 
}
}

以下是module.config.php中的/module/Album/config/代码:

return array(
’controllers’ => array(
    ’invokables’ => array(
        ’Album\Controller\Album’ => ’Album\Controller\AlbumController’,
    ),
),

’view_manager’ => array( 
    ’template_path_stack’ => array(
        ’album’ => __DIR__ . ’/../view’,
    ),
),

'router' => array(
    'routes' => array(
        'album' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '/album[/][:action][/:id]',
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id' => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Album\Controller\Album',
                    'action' => 'index',
                ),
            ),
        ),
    ),
),'
);

我已经阅读了一些遇到过类似情况的人,但他们的问题是由于拼写错误/错误命名的课程造成的。我没有看到我的代码有任何问题(甚至直接从教程复制/粘贴)。

有人可以给我一些建议吗?

由于

6 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,解决方法是使用<?php启动每个.php文件 这在教程中并不清楚(如果你只是从那里复制代码),这就是我得到同样异常的原因。

答案 1 :(得分:0)

我能看到的唯一原因是你应该用正常的单引号替换所有'。 使用会导致意外行为。

答案 2 :(得分:0)

教程module.config.php文件中有错误。 更改'id' => '[0-9]+','id' => '[0-9]*', +表示一个或多个数字。如果您只是致电http://zf2-tutorial.localhost/album/,则网址中没有数字,因此重写符号不匹配。从+更改为*(0或更多)

答案 3 :(得分:0)

我有完全相同的问题,我的问题和解决方案是

本教程中的第一个命令是:

php composer.phar create-project --stability="dev" zendframework/skeleton-application path/to/install

它被切断了我的屏幕,因此我将命令复制/粘贴到命令行而不读取结尾。所以我的app目录结构包含了一个目录./path/to/install所有的安装文件,包括application.config.php。

将/ path / to / install /中的所有内容移动到应用程序的根目录允许Zend查找“相册”模块。

注意:/ path / to / install / module包含相册模块,但如果执行

则会失败
mv ./path/to/install/* .

所以一定要将/ path /到/ install / module的Application模块移动到app_root_dir / module /。

答案 4 :(得分:0)

您可以查看composer.json天气,包括以下内容:

"autoload": {
    "psr-4": {
        "Application\\": "module/Application/src/",
        "Album\\": "module/Album/src"
    }
 },

答案 5 :(得分:-1)

请检查你的Module :: getConfig(),  和玩: return include __DIR__ . '/../config/module.config.php';    我添加了'../'前缀,效果很好。