我正在研究zend框架2教程应用程序。我按如下方式设置了我的相册模块目录:
当我启动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',
),
),
),
),
),'
);
我已经阅读了一些遇到过类似情况的人,但他们的问题是由于拼写错误/错误命名的课程造成的。我没有看到我的代码有任何问题(甚至直接从教程复制/粘贴)。
有人可以给我一些建议吗?
由于
答案 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';
我添加了'../'前缀,效果很好。