2013-02-08 112 views
2

Zend Framework 2声称拥有“随意使用”设计,允许您轻松使用其任何模块而无需提交完整堆栈。我需要一个良好的数据库访问层,并且从在线文档和建议中我喜欢Zend \ Db的外观。我已将Zend/Db文件夹放在我的/ lib目录中,但我无法让PHP识别Zend \ Db \ Adapter \ Adapter类。我不断收到一个致命的错误,当我尝试使用它:如何加载Zend Framework 2数据库模块

Fatal error: Class 'Zend\Db\Adapter\Adapter' not found in /home/username/public_html/test.php on line 6

我试着在我的.htaccess设置ZF2_PATH: SetEnv ZF2_PATH /home/username/public_html/lib/Zend

我已经尝试设置包括在我的代码路径: set_include_path($_SERVER['DOCUMENT_ROOT'] . '/lib' . PATH_SEPARATOR . get_include_path());

我试过明确地加载和实例的Zend \装载机:

require_once 'lib/Zend/Loader/StandardAutoloader.php'; 
$zendLoader = new Zend\Loader\StandardAutoloader(); 
$zendLoader->register(); 

这些都没有任何影响。我试着明确地要求Zend/Db/Adapter/Adapter.php,并且确实修复了我所看到的错误,但是我只是得到了它的一个依赖关系的相同错误,所以这不是一个实际的解决方案。

我在这里做错了什么? ZF2是不是真的为这种模块化使用设计,还是我错过了什么?

编辑:我得到这个写我自己的自动加载功能工作:

function autoloader($class) { 
    $path = explode('\\', $class); 
    foreach ($path as $p) { 
     $cp .= DIRECTORY_SEPARATOR . $p; 
    } 
    include __DIR__ . '/lib/' . $cp . '.php'; 
} 
spl_autoload_register(autoloader); 

这种有意义 - 很明显,如果我使用的数据库模块没有框架的其余部分,我可以不期望框架为我自动加载 - 除了我仍然不明白为什么手动加载Zend \ Loader没有解决问题。不处理自动加载Zend \ Loader的要点?无论如何,我现在有一个可行的解决方案,但如果有更好的解决方案,我很乐意听到它。

回答

6

我强烈建议你退房composer。它真正简化了大量现代PHP库之间的依赖关系以及自动加载。

举例来说,如果你开始你的项目,你知道你想在Zend中-DB拉,你会做这样的事情:

$ mkdir myproject 
$ cd myproject 
$ curl -s https://getcomposer.org/installer | php 
$ ./composer.phar require zendframework/zend-db:2.1.1 

最后一行将导致作曲家春天到行动。它将创建一个名为“vendor”的目录,在其中保存它管理的所有库。然后,它会在那里检查Zend-db的2.1.1版本,并设置一个vendor/autoload.php,这将在您的项目中使用。

然后你可以测试它。创建myproject/index.php像这样:

<?php 
require_once "vendor/autoload.php"; 

$adapter = new Zend\Db\Adapter\Adapter(array(
    'driver' => 'Pdo_Sqlite', 
    'database' => 'path/to/sqlite.db' 
)); 

它只是工作。

以后,如果你决定你需要的Zend \邮件也是如此,你只是:

$ ./composer.phar require zendframework/zend-mail:2.1.1 

和作曲家将安装它,与一对夫妇相依一起,并确保它的可用磁带自动加载机。

作曲家也不是ZF特定的。有一个完整的代码生态系统可供探索。Packagist是一个很好的开始。

+0

感谢您的意见。 – cfc 2013-05-21 17:16:52