Как использовать Doctrine DBAL? - PullRequest
3 голосов
/ 18 июля 2011

У меня есть структура этой папки

[-] 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 с этой структурой каталогов?

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Вам необходимо добавить путь к библиотеке Doctrine к include_path.См. get_include_path и set_include_path функции PHP.

1 голос
/ 18 июля 2011

Мне это кажется неправильным (из предупреждения)

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

Я не так много знаю о php, но не думаю, что путь к файлу может разрешиться.А пока попробуйте удалить dirname ( _ __ FILE_ _ _) и просто жестко прописать путь в нем.

0 голосов
/ 15 ноября 2013

Ваш 2-й параметр конструктора ClassLoader недопустим:

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

2-й параметр должен быть include path каталога Doctrine и не должен быть файлом.

Следовательно, правильная строка:

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

...