“模块(用户)无法初始化”:Zend Framework 2中的例外情况

时间:2017-04-11 10:30:47

标签: php zend-framework

我已经下载了Zend Framework 2的骨架应用程序。然后我创建了一个名为“User”的模块。

文件夹结构;

Module
  .....
  User
   config
      module.config.php
   src
      Controller
        UserController.php
      Model
        User.php
        UserTable.php
      Form
      Module.php
   view
      index.phtml
      ...

我在应用程序的modules.config.php中添加了'User'

return [
  'Zend\Form',
  'Zend\Db',
  'Zend\Router',
  'Zend\Validator',
  'Application',
  'User',
];

我的Module.php代码如下;

<?php
 namespace User;

 use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements ConfigProviderInterface
{
public function getConfig()
{
    return include __DIR__ . '/../config/module.config.php';
}

public function getServiceConfig()
{
    return [
        'factories' => [

            Model\UserTable::class => function($container) {
                $tableGateway = $container->get(Model\UserTableGateway::class);
                return new Model\UserTable($tableGateway);
            },

            Model\UserTableGateway::class => function ($container) {
                $dbAdapter = $container->get(AdapterInterface::class);
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Model\User());
                return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
            },
        ],
    ];
}

public function getControllerConfig()
{
    return [
        'factories' => [
            Controller\UserController::class => function($container) {
                return new Controller\UserController(
                    $container->get(Model\UserTable::class)
                );
            },
        ],
    ];
}
}

在composer.json里面

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

但是我收到错误“模块(用户)无法初始化”。我是Zend Framework的新手。我认为Module.php中有问题。我在 stackoverflow 中尝试了所有答案。其中大多数都表示名称空间问题。但我想我已经说得对了。 如果需要更多代码,请指出问题,请提及。

2 个答案:

答案 0 :(得分:0)

我假设您使用文件夹结构PSR-4,我没有看到Module.php,但它应该在src目录中。

另外,请确保将模块添加到composer.json,方法与添加Application模块的方式相同:

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

然后通过以下方式更新作曲家的自动加载文件:
$ php composer.phar dump-autoload

答案 1 :(得分:0)

好的,解决了。问题是“User \”末尾的逗号(,):“module / User / src /”,在composer.json中