1

我正在尝试使用一些没有 MVC 结构的 Zend 组件。例如,如果我有这个目录结构:

  • /
  • /Zend
  • /图片
  • .
  • .
  • /css

    包括('Zend/Db.php');$db = Zend_Db::factory( $db_config['adapter'], $db_config ); //可以用了

但是,如果我想要这个结构:

  • /
  • /图片
  • /库
    • 曾德
    • 其他库
  • /css

    包括('Lib/Zend/Db.php');$db = Zend_Db::factory( $db_config['adapter'], $db_config ); //可以用了

但是在这里,它失败了,因为其他文件和类正在查看: / Zend 而不是 lib / Zend

我怎样才能访问我所有文件中的 Zend_Db 类,而与文件夹级别无关?

谢谢!

4

3 回答 3

4

我建议将Lib/Zend目录添加到您的include_path。如果这样做,Zend 类将能够正确加载。

就像是:

set_include_path(implode(PATH_SEPARATOR, array(
    '/path/to/Lib',  // <-- change this to the actual path where the Zend dir is uploaded
    get_include_path(),
)));

这会将 Lib 目录添加为 include_path 中的第一个路径。如果您要包含更多其他库文件,您可能希望在之后移动它,get_include_path()以便首先搜索现有路径。

或者,您可以手动要求您知道将要使用的 Zend 文件(例如Lib/Zend/Db.phpLib/Zend/Db/Pdo/Mysql.php等等,但这可能很乏味且容易忘记,所以我会使用 include_path 方法。

于 2012-04-24T18:15:00.730 回答
1

您应该将Lib目录添加到包含路径(不是Lib/Zend):

set_include_path(
    $_SERVER['DOCUMENT_ROOT'].'/Lib' . PATH_SEPARATOR .
    get_include_path()
);

然后,您可以在需要它们后使用这些类:

require_once 'Zend/Db.php';
$db = Zend_Db::factory( $db_config['adapter'], $db_config );

由于您在评论中说您的所有脚本都包含一个通用的 config.php 文件,您可以使用它来设置 ZF 自动加载器,这使一切变得更加容易(在设置包含路径之后放置它):

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_loader_Autoloader::getInstance();

之后,您不需要包含任何其他 ZF 文件,因此您只需在需要时实例化这些类。您还可以使用相同的自动加载器从 lib 加载您自己的类,或从其他库加载类。

于 2012-04-24T19:35:57.470 回答
0

初始化* ZF 做

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

现在您可以自由调用任何 ZF 组件,它会自动为您自动加载。

*Lib 目录必须是 php 包含路径的一部分。正如draw010提到的那样,这很容易做到

set_include_path(implode(PATH_SEPARATOR, array(
    '/path/to/Lib',  // <-- change this to the actual path where the Zend dir is uploaded
    get_include_path(),
)));
于 2012-04-25T04:26:35.383 回答