我正在尝试使用一些没有MVC结构的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类?
谢谢!
答案 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.php
,Lib/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(),
)));