在ServiceNotFoundException的ZendFramework 2,例如来自Rob艾

2019-06-26 13:44发布

在过去的几周里,我一直在关注ZF2尤其是罗布·艾伦的“相册”例如 ,我创建了例如DB-'zf2tutorial“和示例表'album”,工作正常获取的所有项目,当我使用PHP,MySQL的,这样的问题在数据库中的数据。

我local.php看起来是这样的骗子网络g.autoload / local.php:

return array(
    'db' => array
    (
        'driver'         => "Pdo",
        'dsn'            => "mysql:dbname=zf2tutorial;hostname=localhost",
        'username'       => "user", //here I added my valid username 
        'password'       => "password", //here I added my valid password 
        'driver_options' => array
        (
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
        ),
    ),
);

Module.php **模块/专辑/ Model.php

<?php
namespace Album;

use Album\Model\AlbumTable;

class Module 
{
    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 getServiceConfiguration() 
    {
        return array(

            'factories' => array(

                'album-table' => function($sm) //also tried this 'Album\Model\AlbumTable' =>  function($sm)
                {
                    $dbAdapter = $sm->get('db-adapter');//also tried this $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $table = new AlbumTable($dbAdapter);
                    return $table;
                },
            ),
        );
    }  
}

我只是想检查zf2turorial /专辑是否管用它抛出这个错误,它类似于这个职位在这里stackoverlow。

它被投掷的错误是: 其他信息:Zend的\的ServiceManager \异常\ ServiceNotFoundException的

File:
..\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php:392
Message:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Album\Model\AlbumTable

我按照ZF2贝塔5教程为好,但仍然遇到此问题。 在情况下,如果任何人有一个解决方案,请大家与我们分享。

谢谢

Answer 1:

好像有人已经忘记了更新ZF2的最新变化。

解决方案:

文件模块/专辑/ Module.php必须包含这个内容:

<?php

namespace Album;

use Album\Model\AlbumTable;
use Zend\ModuleManager\Feature\ServiceProviderInterface;

class Module implements ServiceProviderInterface

那么你必须重新命名

public function getServiceConfig()

public function getServiceConfiguration()


Answer 2:

公共职能getServiceConfiguration()不正确的函数名

rename getServiceConfiguration() to getServiceConfig()

虽然它不是强制性的,你应该声明类模块

class Module implements ServiceProviderInterface


Answer 3:

我不知道,但尝试把代码放到

CON网络g.autoload / global.php:像这样

return array(
    'db' => array(

        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=kd_tutorial;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);


Answer 4:

修改配置/自动加载/ global.php与下面的代码:

return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=YourDBName;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

你应该把你的数据库凭据在配置/自动加载/ local.php,使他们不能在git仓库(如local.php被忽略):

return array(
    'db' => array(
        'username' => 'YourDBUsername',
        'password' => 'YourDBPassword',
    ),
);

如果您想了解更多详情,请参阅链接1或链接2



Answer 5:

刚刚得到了同样的问题。

Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Cache\Model\UniversityStorage

在我的情况下,问题是,这PHPUnit的找不到钥匙Cache\Model\UniversityStorage在服务管理器(注册表),因为它是在被添加Module类的Cache模块和Cache模块中的PHPUnit的配置文件丢失,还没有被加载:

/module/Application/test/phpunit.config.php

<?php
return array(
    'modules' => array(
        'Application',
        'Cache', // <- was missing
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            '../../../config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            'module',
            'vendor',
        ),
    ),
);

我已经添加了Cache模块到模块列表。 现在,它的工作原理。



Answer 6:

问题是,配置/自动加载内/ global.php被命名为“Zend的\ DB \适配器\适配器”,而模块/专辑/ Module.php内有人搜索“的Zend \ DB \适配器”的服务(缺少其他\适配器)。

将缺少“\适配器”模块/专辑/ Module.php内像这样的固定对我来说。

                'AlbumTableGateway' => function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');


Answer 7:

module/Album/src/Album/Model/Album.php ,改用:

array('name' => 'striptags'), array('name' => 'stringtrim'),

看到被Zend创建的上述命名空间在vendor/zendframework/zendframework/library/Zend/Filter/FilterPluginManager.php



Answer 8:

我已经encoutered当试图实现代码遵循Zend的教程同样的问题。 最主要的原因是为了文件夹

module
    ModuleX
        config
        src
            ModuleX //may be you forget this one
                Controller
                Factory
                Model
                ...
        view
        Module.php

在Module.php,getConfig(),getAutoloaderConfig()是足够运行

class Module implements AutoloaderProviderInterface, ConfigProviderInterface{
public function getAutoloaderConfig(){
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}

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


Answer 9:

如果您收到类似的错误了不同的模块和代码似乎绝对正确的,然后加入composer.json条目

“相册\”: “模块/专辑/ SRC /”

在这样的自动加载和自动加载-dev的部分,在那里相册是你的模块的名称

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

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

这种运行“作曲家更新”后重新加载页面。 检查是否错误消失。



文章来源: ServiceNotFoundException in ZendFramework 2, example from Rob Allen