2012-07-06 2 views
4

Это учебное пособие Роба Аллена «Краткое руководство для Zend Framework beta4».Как мне получить Service Manager в Zend Framework 2 beta4 для создания экземпляра для альбома?

Сообщение об ошибке: Zend \ ServiceManager \ ServiceManager :: получить не удалось извлечь или создать экземпляр для альбома стола

Похоже, он не пытается установить соединение с БД, но я не нашел способ рассказать. Он использует закрытие для возврата экземпляра из ServiceManager, но получает указанное выше сообщение об ошибке.

модуль/Альбом/module.php

пространство имен Альбом;

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() 
{ 

    $albumTable = array(
      'factories' => array(
        'album-table' => function($sm) { 
         $dbAdapter = $sm->get('db-adapter'); 
         $table = new AlbumTable($dbAdapter); 
         return $table; 
        }, 
      ), 
    );  
    return $albumTable; 
} 
} 

пространство имен Применение;

использование Zend \ Db \ адаптер \ адаптер в DbAdapter,

class Module 
{ 
    public function getConfig() 
    { 
     return include __DIR__ . '/config/module.config.php'; 
    } 
    public function getServiceConfiguration() 
    { 
      $factoryDBAdaptor = array(
       'factories' => array(
       'db-adapter' => function($sm) { 
        $config = $sm->get('config'); 
        $config = $config['db']; 
        $dbAdapter = new DbAdapter($config); 
        return $dbAdapter; 
       }, 
      ), 
      ); 
     return $factoryDBAdaptor; 
    }  
} 

конфигурации \ Автозагрузка \ global.php

return array(
    'db' => array(
     'driver' => 'PDO', 
     'dsn'   => 'mysql:dbname=zf2tutorial;hostname=localhost', 
     'username'  => 'user', 
     'password'  => 'password', 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
     ), 
    ), 
); 
+0

Имея тот же вопрос ... –

+0

Имея тот же выпуск слишком – Developer

+0

Привет w2wDev сделали вы решили эту проблему, в случае, если да, то было бы полезно, если бы вы могли бы поделиться своим решением – 125369

ответ

2

Это связано с тем, что мастер Zend Framework изменилась с тех пор Beta 4 и поэтому мой бета-4-ориентированный учебник больше не работает с последним мастером ZF.

Кроме того, SM может иметь предыдущие исключения, поэтому вы должны проверить, есть ли какие-либо предыдущие исключения, поскольку это может показать базовую ошибку.

Update
По состоянию на 11 июля 2012 года, мой tutorial теперь обновляется для бета-версии 5. Теперь он использует ServiceFactory ДБ адаптер для создания адаптера и поэтому вам не нужно даже изменить класс модуля приложения больше ,

+2

Видимо проблема в $ dbAdapter = $ sm-> get ('db-adapter'); line –

0

Убедитесь, что основной модуль Module.php имеет ссылку getServiceConfiguration(). У меня была такая же проблема, и я забыл ее включить.

модуль/Application/module.php:

<?php 
namespace Application; 
use Zend\Db\Adapter\Adapter as DbAdapter; 
class Module 
{ 
    public function getConfig() 
    { 
     return include __DIR__ . '/config/module.config.php'; 
    } 

    public function getServiceConfiguration() 
    { 
     return array(
      'factories' => array(
       'db-adapter' => function($sm) { 
        $config = $sm->get('config'); 
        $config = $config['db']; 
        $dbAdapter = new DbAdapter($config); 
        return $dbAdapter; 
       }, 
      ), 
     ); 
    } 
} 
+0

Спасибо Арманд, однако у меня есть то, что я сейчас получаю: – w2wDev

+0

Спасибо Арман, но у меня уже есть это там. – w2wDev

+0

@Armand Im получает ту же самую точную ошибку, что опубликовал w2wDev. Какие-либо предложения. Мой основной модуль Module.php имеет ссылку на getServiceConfiguration(), как упоминалось вами, но по-прежнему получает ту же ошибку. Любая помощь будет оценена – 125369

0

обновление файл composer.json со следующей строки.

"zendframework/zendframework": "dev-master#18c8e223f070deb07c17543ed938b54542aa0ed8" 

Пройдите следующие команды, после чего вам будет хорошо.

php composer.phar self-update 
php composer.phar update 
php composer.phar install 
0

Я добавил код, предоставленный module.php, и он не был выполнен. Я изменил ключ на Zend \ db \ Adapter \ Adapter и заставил его выполнить. Тем не менее, я получил ошибку Undefined index: db on line $ config = $ config ['db']; потому что $ config не содержит этого ключа.

Мне кажется очевидным, что для загрузки ключа db в массив $ config требуется дополнительный код. Это правда? Что и где будет этот код? My module.php:

<?php 

namespace Album; 

use Album\Model\Album; 
use Album\Model\AlbumTable; 
use Zend\Db\ResultSet\ResultSet; 
use Zend\Db\TableGateway\TableGateway; 
use Zend\ModuleManager\Feature\ServiceProviderInterface; 
use Zend\Db\Adapter\Adapter as DbAdapter; 

class Module implements ServiceProviderInterface { 

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

    // Add this method: 
    public function getServiceConfig() { 
     return array(
      'factories' => array(
       'Zend\db\Adapter\Adapter' => function($sm) { 
        echo PHP_EOL . "SM db-adapter executed." . PHP_EOL; 
        $config = $sm->get('config'); 
        $config = $config['db']; 
        $dbAdapter = new DbAdapter($config); 
        return $dbAdapter; 
       }, 
       'Album\Model\AlbumTable' => function($sm) { 
        echo PHP_EOL . "SM AlbumTable executed." . PHP_EOL; 
        $tableGateway = $sm->get('AlbumTableGateway'); 
        $table = new AlbumTable($tableGateway); 
        return $table; 
       }, 
       'AlbumTableGateway' => function ($sm) { 
        echo PHP_EOL . "SM AlbumTableGateway executed." . PHP_EOL; 
         $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
         $resultSetPrototype = new ResultSet(); 
         $resultSetPrototype->setArrayObjectPrototype(new Album()); 
         return new TableGateway('album', $dbAdapter, null, $resultSetPrototype); 
       }, 
      ), 
     ); 
    } 

} 

?> 
0

Исправлена ​​ошибка, отключая панель инструментов. Просто перейдите к config/autoload/zend-developer-tools.local-development и установите для панели инструментов значение false.

'toolbar' => [ 
      /** 
      * Enables or disables the Toolbar. 
      * 
      * Expects: bool 
      * Default: false 
      */ 
      'enabled' => false, 

 Смежные вопросы

  • Нет связанных вопросов^_^