ServiceNotFoundException в ZendFramework 2, пример от Роба Аллена

в течение последних нескольких недель я следил за ZF2 особенно Альбом Роба Аллена примерЯ создал пример DB- "zf2tutorial". и пример таблицы «альбом», которая отлично работает при извлечении всех элементов, когда я использую php-mysql, поэтому проблемы с данными в БД.

Мой local.php выглядит так config.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 / album или нет, он выдает эту ошибку, которая похожа наэтот опубликовать здесь в stackoverlow.

Ошибка, которую он выдает: Additional information: Zend\ServiceManager\Exception\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 Beta 5, но все еще сталкивался с этой проблемой. Если у кого-то есть решение, поделитесь с нами.

Спасибо

 Fawad Ghafoor16 апр. 2013 г., 15:01
@BrianKessler Вы нашли решение, я все еще застрял :(
 Brian Kessler11 нояб. 2012 г., 17:29
Вы когда-нибудь находили решение для этого? Я в настоящее время борюсь с той же самой проблемой.
 Ziyan Junaideen10 февр. 2013 г., 18:31
У меня тоже такая же проблема!
 user134966319 мар. 2014 г., 10:09
У меня была такая же проблема в этом же уроке сегодня. Для меня, перемещение словаря db и service_manager [учебник просит нас добавить их вglobal.php] к моему модулю(Album/config) module.config.php сделал свое дело.

Ответы на вопрос(9)

Я допускаю ту же проблему, когда пытаюсь реализовать код, следуя Zend Tutorial. Основной причиной является папка заказа

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';
}

Вmodule/Album/src/Album/Model/Album.phpиспользуйте вместо:

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

Смотрите вышеупомянутые пространства имен, созданные Zend вvendor/zendframework/zendframework/library/Zend/Filter/FilterPluginManager.php

Просто получил ту же проблему.

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 модуль в список модулей. Теперь это работает.

публичная функция getServiceConfiguration () не является правильным именем функции

rename getServiceConfiguration() to getServiceConfig()

хотя это не обязательно, вы должны объявить класс Module как

class Module implements ServiceProviderInterface
 11 нояб. 2012 г., 17:32
Я борюсь с этой же проблемой и пытался получить конфигурацию обоими способами, в том числе сделать одну функцию просто псевдонимом для вызова другой, но это не помогло. Также не было добавления инструментов.

Измените config / autoload / 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',
        ),
    ),
);

и вы должны поместить свои учетные данные базы данных в config / autoload / local.php, чтобы они не находились в репозитории git (так как local.php игнорируется):

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

Если вы хотите больше деталей, обратитесьlink1 или жеlink2

Я не уверен, но попробуйте ввести код в

кон & # xFB01; 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',
        ),
    ),
);
 11 нояб. 2012 г., 17:31
Я боролся с этой же проблемой, и у меня уже был этот код в моем global.php; это, похоже, не помогает.
 13 нояб. 2012 г., 22:42
В таком случае я бы сказал, попробуйте этот ..kdtips.co.nz/2012/10/13/zend-framework-2-database-interaction<,/span> – Kdecom Nov 13 '12 at 21:42

Кажется, кто-то забыл обновить последние изменения в zf2.

решение:

файл module / Album / Module.php должен содержать следующее содержимое:

<?php

namespace Album;

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

class Module implements ServiceProviderInterface

тогда вы должны переименовать

public function getServiceConfig()

в

public function getServiceConfiguration()
 18 февр. 2013 г., 21:41
Использование getServiceConfig () было решением для меня!
 11 нояб. 2012 г., 17:33
Я борюсь с этой же проблемой и пытался получить конфигурацию обоими способами, в том числе сделать одну функцию просто псевдонимом для вызова другой, но это не помогло. Также не добавив использование.
 15 апр. 2013 г., 13:59
При этом я получаю эту ошибку. Неустранимая ошибка: класс Album \ Module содержит 1 абстрактный метод и поэтому должен быть объявлен как абстрактный или реализовать оставшиеся методы (Zend \ ModuleManager \ Feature \ ServiceProviderInterface :: getServiceConfig) в D: \ projects \ zf2- учебник \ module \ Album \ Module.php в строке 54
 25 февр. 2013 г., 06:33
Теперь, когда ZF 2.1.3 вышел,getServiceConfig() верно. Это просто нужноServiceProviderInterface линий.
 30 июл. 2012 г., 11:22
Zend стандартизировал всю конфигурацию для конфигурации.getServiceConfig() действительно правильно! Обновите файлы Framework до последней версии, которая является RC2, вы не должны найти в ней ни одной конфигурации :)

Если вы получаете похожую ошибку для разных модулей и код кажется правильным, добавьте запись в composer.json

& quot; Альбом \ & quot ;: & quot; модуль / Альбом / src / & quot;

в разделах autoload и autoload-dev, например, где Album - это имя вашего модуля

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

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

после этого запустите «Обновление композитора» и перезагрузите страницу. проверьте, если ошибка исчезла.

Проблема в том, что в config / autoload / global.php служба называется «Zend \ Db \ Adapter \ Adapter» находясь в модуле / Album / Module.php, он искал "Zend \ Db \ Adapter" (отсутствует дополнительный \ адаптер).

Добавление отсутствующего & quot; \ Adapter & quot; внутри module / Album / Module.php как это исправил это для меня.

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

Ваш ответ на вопрос