如何仅加载Zend Framework 2数据库模块

cfc*_*cfc 2 php database-abstraction zend-framework2

Zend Framework 2声称具有"随意使用"设计,允许您轻松使用其任何模块而无需承诺完整堆栈.我需要一个好的数据库访问层,从网上的文档和推荐我喜欢Zend\Db的外观.我已将Zend/Db文件夹放在我的/ lib目录中,但是我无法让PHP识别Zend\Db\Adapter\Adapter类.当我尝试使用它时,我不断收到致命错误:

致命错误:第6行/home/username/public_html/test.php中找不到类'Zend\Db\Adapter\Adapter'

我试过在我的.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\Loader:

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

这些都没有任何影响.我试图明确要求的Zend/DB /适配器/ 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);
Run Code Online (Sandbox Code Playgroud)

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

tim*_*dev 6

我强烈建议你看看作曲家.它真正简化了大量现代PHP库之间的依赖关系,以及自动加载.

例如,如果你开始你的项目,并且你知道你想要引入zend-db,你会做这样的事情:

$ mkdir myproject
$ cd myproject
$ curl -s https://getcomposer.org/installer | php   
$ ./composer.phar require zendframework/zend-db:2.1.1
Run Code Online (Sandbox Code Playgroud)

最后一行将使作曲家开始行动起来.它将创建一个名为"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'
));
Run Code Online (Sandbox Code Playgroud)

它只是有效.

之后,如果你决定需要Zend\Mail,你只需:

$ ./composer.phar require zendframework/zend-mail:2.1.1
Run Code Online (Sandbox Code Playgroud)

和作曲家将安装它,以及一些依赖项,并确保它可用于自动加载器.

Composer也不是特定于ZF的.有一个完整的代码生态系统可供探索. Packagist是一个很好的起点.