0

最新のテクノロジー(Apache 2.4、PHP 5.4、PostgreSQL 9.1)を使用して、学習目的で新しいWebアプリケーションをセットアップしようとしています。

ZendFramework2を使用して開発することを選択しました。

私のメインモジュールでは、このメソッドを定義しました:

public function getServiceConfiguration() {
    return array(
        'factories' => array(
            'adapter' => function ($sm) {
                $config = $sm->get('config');
                $adapter = new Adapter($config['db']);

                return $adapter;
            }
        ),
    );
}

$ config ['db']は、autoload/global.phpで定義されています。

return array(
    'db' => array(
        'driver' => 'PDO',
        'dsn' => 'pgsql:host=localhost;port=5436;user=root;password=myrootpwd',
    )
);

しかし、$ serviceManager-> get('adapter')を呼び出そうとすると、次のような例外が発生します。

致命的なエラー:キャッチされない例外'Zend \ Db \ Adapter \ Exception \ InvalidArgumentException' with message'提供またはインスタンス化されたドライバーオブジェクトは、C:\ Program Files \ 626Suite \ application\libraryのZend\Db \ Adapter \ Driver\DriverInterface'を実装していません294行目の\Zend\ ServiceManager \ ServiceManager.php

Zend \ Db \ Adapter \ Exception \ InvalidArgumentException:提供またはインスタンス化されたドライバーオブジェクトは、C:\ Program Files \ 626Suite \ application \ library \ Zend \ Db \ Adapter\Adapter.phpのZend\Db \ Adapter \ Driver\DriverInterfaceを実装していません80行目

コールスタック:
0.0015 121600 1. {main}()C:\ Program Files \ 626Suite \ application \ data \ script \ install.php:0
0.5699 936080 2. Zend \ ServiceManager \ ServiceManager-> get(string(7)、? ??)C:\ Program Files \ 626Suite \ application \ data \ script \ install.php:7
0.5700 936440 3. Zend \ ServiceManager \ ServiceManager-> create(array(2))C:\ Program Files \ 626Suite \ application \ library \ Zend \ ServiceManager \ ServiceManager.php:277
0.5701 936520 4. Zend \ ServiceManager \ ServiceManager-> createServiceViaCallback(class Closure、string(7)、string(7))C:\ Program Files \ 626Suite \ application \ library \ Zend \ ServiceManager \ ServiceManager.php:353
0.5701 936672 5. call_user_func(class Closure、class Zend \ ServiceManager \ ServiceManager、string(7)、string(7))C:\ Program Files \ 626Suite \ application \ library \ Zend \ ServiceManager \ ServiceManager.php:543
0.5701 936696 6 .Age \ Module-> Age {closure}(class Zend \ ServiceManager \ ServiceManager、string(7)、string(7))C:\ Program Files \ 626Suite \ application \ library \ Zend \ ServiceManager \ ServiceManager.php:543
0.6047 1024184 7. Zend \ Db \ Adapter \ Adapter-> __ Construct(class Zend \ Config \ Config、???、???)C:\ Program Files \ 626Suite \ application \ module \ Age \ Module.php:43

編集:

私はファクトリを次のように変更しようとしました:

public function getServiceConfiguration() {
    return array(
        'factories' => array(
            'adapter' => function ($sm) {
                $config = $sm->get('config');
                $PDO = new \PDO($config['db']['dsn']);
                $adapter = new Adapter($PDO);

                return $adapter;
            }
        ),
    );
}

そして、最初にデータベース「root」が存在しないというエラーが発生しましたが、構成を次のように変更した後です。

return array(
    'db' => array(
        'driver' => 'PDO',
        'dsn' => 'pgsql:host=localhost;port=5436;dbname=postgres;user=root;password=myrootpwd',
    )
);

前に説明した例外を取得することに戻りました。

4

2 に答える 2

5

以下は私のために働きます:

/config/autoload/database.global.php

return array(
'db' => array(
    'driver'    => 'Pdo',
    'dsn'       => "pgsql:host=127.0.0.1;dbname=mydb",
    'username'  => 'username',
    'password'  => 'mypass',
),
);

/module/Application/Module.php

public function getServiceConfiguration()
{
    return array(
        'factories' => array(
            'db_adapter' =>  function($sm) {
                $config = $sm->get('Configuration');
                $dbAdapter = new \Zend\Db\Adapter\Adapter($config['db']);
                return $dbAdapter;
            }
        ),
    );
}

次に、次のように使用できます。

$sql = "SELECT * FROM table WHERE field=?";
$statement = $this->adapter->query($sql);
$res =  $statement->execute(array($var));
于 2012-06-19T20:19:52.900 に答える
1

結局、私もこの問題を解決することができました。

解決策は、現在使用されているバージョンのZendFramework2をbeta4からgithubから直接ダウンロードした最新のマスターに更新することでした。

Zendコード自体に問題があったと思います。これは、コードや設定を変更しなくても正常に動作しているためです。

于 2012-06-21T18:54:06.970 に答える