如何使用Doctrine DBAL?

问题描述:

我有这样的文件夹结构如何使用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,该代码是否正确?

您需要将Doctrine库路径添加到include_path。请参阅get_include_pathset_include_path PHP函数。

+1

我尝试添加此:通过set_include_path(真实路径(目录名(_ _文件_ _)'/ ../../../lib中/供应商/教义/学说/'));但仍然返回相同的错误。我在_和_中放置空格,因为double _未显示在SO – Permana

+0

@Permana检查'realpath'是否返回字符串或布尔值。相对路径中可能有太多/很少的点或某些文件权限问题。 – takeshin

+0

尝试“手动”提供正确的路径。使用'is_readable'检查文件。也许这是一个文件许可问题。 – takeshin

这看起来我错了(从警告)

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

我不知道很多关于PHP的,但我不认为文件路径可以解决。现在,请尝试删除dirname(_ __FILE_ _ _),然后对该路径进行硬编码。

+0

我尝试不带dirname(__ FILE__),并且仍然出现错误消息。我也尝试添加实际路径(dirname(__ FILE __)。'/ ../../path'),并且在尝试硬编码路径时仍然出现错误消息 – Permana

+0

,您使用的路径是什么? (例如,将整个路径保存为一个字符串,回显字符串以便我们可以看到它是什么,并使用require($ myPath);)将其包含在内。如果这不是问题,您是否使用名称空间?当我使用自己的命名空间和教义时,遇到了一些与教义相关的问题。 – i8abug

+0

需求功能没问题。我尝试只运行require函数,并且它不返回错误(我设置了error_reporting(E_ALL))。我没有使用名称空间,但教义做到了。 – Permana

ClassLoader构造你的第二个参数是无效的:

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

的第二个参数应该是教条目录的include path,不应该是一个文件。

因此,正确的路线是:

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