8

過去数週間、私は ZF2、特にRob Allen の 'Album' exampleをフォローしてきました。サンプル DB-'zf2tutorial' とサンプル table-'album' を作成しました。これらは、php-mysql を使用するときにすべてのアイテムを正常にフェッチします。 DB内のデータに問題があります。

私の 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 **module/Album/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 のこの投稿に似ています。

スローされているエラーは次 のとおりです。追加情報: 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 チュートリアルにも従いましたが、まだこの問題が発生しています。誰かが解決策を持っている場合は、私たちと共有してください。

ありがとう

4

9 に答える 9

6

誰かが 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()
于 2012-07-27T22:31:45.897 に答える
2

public function getServiceConfiguration() は正しい関数名ではありません

rename getServiceConfiguration() to getServiceConfig()

必須ではありませんが、クラス Module を次のように宣言する必要があります。

class Module implements ServiceProviderInterface
于 2012-10-27T23:18:12.877 に答える
1

よくわかりませんが、コードを入れてみてください

config.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',
        ),
    ),
);
于 2012-10-27T00:27:20.810 に答える
0

問題は、config/autoload/global.php 内ではサービスの名前が「Zend\Db\Adapter\Adapter」であるのに対し、module/Album/Module.php 内では「Zend\Db\Adapter」を検索していたことです (追加の \Adapter がない)。

このように module/Album/Module.php 内に不足している「\Adapter」を追加すると、修正されました。

                'AlbumTableGateway' => function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
于 2013-05-14T13:14:57.773 に答える
0

次のコードで 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 を参照ください

于 2013-04-19T06:07:59.530 に答える
0

異なるモジュールで同様のエラーが発生し、コードが正しいと思われる場合は、composer.json にエントリを追加します。

"アルバム\": "モジュール/アルバム/src/"

このような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/"
    }
},

この後、「composer update」を実行してページをリロードします。エラーがなくなったかどうかを確認します。

于 2016-11-21T15:35:21.000 に答える