2011-07-18 13 views
3

私はこのフォルダ構造Doctrine DBALの使い方は?

[-] myapp/ 
    [+] app/ 
    [-] lib/ 
     [-] vendor/ 
      [-] doctrine/ 
       [-] Doctrine/ 
         Common/ 
         DBAL/ 
         Symfony/ 
       [+] bin/ 
    [-] sites/ 
     [-] default/ 
      [-] test/ 
        test-doctrine-dbal.php 

を持っていると私は、ドキュメント

<?php 

use Doctrine\Common\ClassLoader; 

require dirname(__FILE__).'/../../../lib/vendor/doctrine/Doctrine/Common/ClassLoader.php'; 

$classLoader = new ClassLoader('Doctrine', dirname(__FILE__).'/../../../lib/vendor/doctrine/Doctrine/DBAL/DriverManager.php'); 
$classLoader->register(); 

$config = new \Doctrine\DBAL\Configuration(); 
$connectionParams = array(
    'dbname' => 'cdcol', 
    'user' => 'root', 
    'password' => '', 
    'host' => 'localhost', 
    'driver' => 'pdo_mysql', 
); 
$conn = DriverManager::getConnection($connectionParams, $config); 

$sql = "SELECT * FROM cds"; 
$stmt = $conn->query($sql); 
while ($row = $stmt->fetch()) { 
    echo $row['titel']; 
} 
?> 

でコードを試してみて、私が手警告:

Warning: require(D:\xampp\htdocs\myphp\sites\default\test/../../../lib/vendor/doctrine/Doctrine/DBAL/DriverManager.php\Doctrine\DBAL\Configuration.php) [function.require]: failed to open stream: No such file or directory in D:\xampp\htdocs\myphp\lib\vendor\doctrine\Doctrine\Common\ClassLoader.php on line 148 

とエラー:

Fatal error: require() [function.require]: Failed opening required 'D:\xampp\htdocs\myphp\sites\default\test/../../../lib/vendor/doctrine/Doctrine/DBAL/DriverManager.php\Doctrine\DBAL\Configuration.php' (include_path='.;D:\xampp\php\PEAR') in D:\xampp\htdocs\myphp\lib\vendor\doctrine\Doctrine\Common\ClassLoader.php on line 148 

PHPの名前空間についてよく分かりません。 PHPのマニュアルでPHPの名前空間について読むことは、まだ問題を解決することはできません。そのディレクトリ構造でDoctrine DBALを使用したい場合、そのコードは正しいですか?

答えて

2

Doctrineライブラリパスをinclude_pathに追加する必要があります。 get_include_pathおよびset_include_path PHP関数を参照してください。

+1

私はこれを追加してみてください:。set_include_path(のrealpath(dirnameは(_ _ FILE _ _)を '/ ../../../libに/ベンダー/教義/教義/ '));それでも同じエラーが返されます。私は_と_に空白を入れます。なぜならダブル_はSOに表示されていないからです。 – Permana

+0

@Permana 'realpath'がstringかbooleanを返すかどうかをチェックします。相対パスに多すぎる/少数のドットがあるか、ファイルの一部のアクセス権の問題がある可能性があります。 – takeshin

+0

正しいパスを手動で提供するようにファイルを '要求する 'ようにしてください。 'is_readable'を使ってファイルをチェックしてください。たぶんそれはファイル許可の問題です。 – takeshin

1

これは(警告から)私には間違って見える

D:\xampp\htdocs\myphp\sites\default\test/../../../lib/vendor/doctrine/Doctrine/DBAL/DriverManager.php\Doctrine\DBAL\Configuration.php 

私はPHPについてその多くを知らないが、私は、ファイルパスが解決できるとは思いません。今のところ、dirname(_ __FILE_ _ _)を削除し、そこにパスをハードコードするだけです。

+0

私はdirname(__ FILE__)を使わずに試してみましたが、同じメッセージではまだエラーがあります。私もrealpath(dirname(__ FILE __)。 '/ ../../path')を追加しようとしましたが、パスをハードコーディングしようとすると同じメッセージ – Permana

+0

でエラーが発生しました。 (つまり、パス全体を文字列に保存し、文字列をエコーし​​て、それが何であるかを確認し、require($ myPath);を使用してそれをインクルードします)。それが問題でない場合は、名前空間を使用していますか? Doctrineで私の名前空間を使った時、私はDoctrineにいくつかの問題があった。 – i8abug

+0

require関数は正常です。私はrequire関数だけを実行しようとし、エラーを返さない(私はerror_reporting(E_ALL)をセットした)。私は名前空間を使用していませんが、教義は行いました。 – Permana

0

ClassLoaderコンストラクタのあなたの第二パラメータが有効ではありません。

$classLoader = new ClassLoader('Doctrine', dirname(_FILE_).'/../../../lib/vendor/doctrine/Doctrine/DBAL/DriverManager.php');

第二パラメータはDoctrineのディレクトリのinclude pathでなければなりませんし、ファイルであってはなりません。

したがって、正しいラインは次のとおりです。

$classLoader = new ClassLoader('Doctrine', '/../../../lib/vendor/doctrine/');

関連する問題