ZF2 でデータベースに接続する場所、必要なデータをセットアップするための application.ini を作成する場所、またはモジュール -> ブートストラップ メソッドで見つけることができません。助けてください
3 に答える
他の人が指摘したように、次のようなものをconfig/autoload/global.php
orに追加できますconfig/autoload/local.php
。
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydb;host=localhost',
'username' => 'root',
'password' => '',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
機密情報 (パスワードなど) をlocal.php
ファイルに追加することをお勧めします。その理由は、このファイルはバージョン管理ソフトウェアによって無視されるべきであり、ファイルが原因で Zend Skeleton アプリケーションを使用している場合、デフォルトで Git によって無視されるため.gitignore
です。
接続を使用するには、サービス マネージャーからデータベース アダプターを取得します。たとえば、コントローラー アクションで次のことができます。
public function someAction() {
$dbAdapter = $this->serviceLocator->get('Zend\Db\Adapter\Adapter');
// Do something with the database adapter, e.g.:
$dbAdapter->query('SELECT username FROM user WHERE id = ?', array(37));
}
このマニュアルは、データベース アダプタを使用してクエリを実行する方法について説明しています。おそらく を利用したいと思うでしょうZend\Db\Sql
。上記は単なる例です。理想的には、コントローラー内で直接データベースにアクセス (つまり、データベース クエリを実行) しないことに注意してください。ただし、上記は単なる例です。これらの設計パターンのいずれかを使用している場合、データベース アダプターをデータ アクセス層(DAL) またはサービス層に挿入するのは非常に簡単です。
上で何が起こるかというと、Zend\Db\Adapter\AdapterServiceFactory
が呼び出されます。Zend\ServiceManager\FactoryInterface
これは、サービス マネージャーがチェックする をクラスが実装しているために発生します (詳細については、サービス マネージャーのソース コードを参照してください)。
Zend\Db\Adapter\AdapterServiceFactory
ファクトリは、サービス マネージャーから構成をフェッチし、「db」キーを読み取ります。この構成 (最初のコード例に示すように) は、インスタンス化されたデータベース アダプタを構成するZend\Db\Adapter\Adapter
のコンストラクタに渡されます。
そのため、構成ファイルのキーの下でデータベース接続を構成し、サービス マネージャーからキーを使用してデータベース接続db
を取得するだけで、残りは自動的に行われます。Zend\Db\Adapter\Adapter
編集:
AdapterServiceFactory
上記が機能するように、構成でが有効になっていることを確認してください。ZendSkeletonApplication を使用している場合は、以下を 内に追加しますconfig/autoload/global.php
。
return array(
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
設定する(global.phpなど):
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydb;host=localhost',
'username' => 'mydb',
'password' => '',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
ディレクトリに移動します: you_application_folder/config/autoload/
global.php で
<?php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydb;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
);
?>
in local.php // ここに重要なデータを保存します
<?php
return array(
'db' => array(
'username' => '*****',
'password' => '*****',
);
?>