3

私はこのフォルダ構造を持っています

[-] 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 を使用したい場合、そのコードは正しいですか?

4

3 に答える 3

2

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

于 2011-07-18T07:29:12.733 に答える
1

これは私には間違っているように見えます(警告から)

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

私はphpについてあまり知りませんが、ファイルパスが解決できるとは思いません。とりあえず、dirname( _ __FILE_ _ _)を削除して、そこにパスをハードコーディングしてみてください。

于 2011-07-18T15:05:00.637 に答える
0

ClassLoaderコンストラクターの 2 番目のパラメーターが無効です:

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

2 番目のパラメーターはinclude pathDoctrine ディレクトリのものである必要があり、ファイルであってはなりません。

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

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

于 2013-11-15T12:31:08.060 に答える