使用没有MVC的Zend_Db组件

时间:2012-04-24 18:01:26

标签: zend-framework components

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

  • /
  • / Zend
  • / images
  • / CSS

    包括( '的Zend / db.php中'); $ db = Zend_Db :: factory($ db_config ['adapter'],$ db_config); //准备好使用

但是,如果我想拥有这种结构:

  • /
  • /图像
  • /库
    • 的Zend
    • OtherLib
  • / CSS

    包括( 'LIB / Zend的/ db.php中'); $ db = Zend_Db :: factory($ db_config ['adapter'],$ db_config); //准备好使用

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

如何独立于文件夹级别访问所有文件中的Zend_Db类?

谢谢!

3 个答案:

答案 0 :(得分: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方法

答案 1 :(得分: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自动加载器,这使得一切变得更加容易(在设置包含路径之后设置): / p>

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

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

答案 2 :(得分:0)

初始化* ZF do

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

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

* Lib目录需要成为php include路径的一部分。 drew010可以轻松完成,

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(),
)));