如何避免向每个CI控制器添加 20个require()
语句?
作为我之前question about integrating Propel项目的后续跟进,是一个更复杂的问题。我试图将生成的类包含到我的应用程序控制器中。这是代码:
require_once('PolicytypeQuery.php');
class PolicyType extends CI_Controller {
function PolicyType() {
parent::get_instance();
}
function index() {
$data = array();
$data['policytypes'] = PolicytypeQuery::create()->find();
$this->load->view('policytype_view',$data);
}
}
生成的类依赖于某个基类,我收到的错误表明此基类尚未包含在某个地方:
[Sat Aug 13 16:22:56 2011] [error] [client 97.97.177.2] PHP Fatal error:
Class 'BasePolicytypeQuery' not found in
/var/lib/IPV/util/build/classes/vault/PolicytypeQuery.php on line 16
我认为生成的代码也会生成必要的require()
语句。但是,它似乎不是这样的:
/**
* Skeleton subclass for performing query and update operations on the 'policytype' table.
*
*
*
* You should add additional methods to this class to meet the
* application requirements. This class will only be generated as
* long as it does not already exist in the output directory.
*
* @package propel.generator.vault
*/
class PolicytypeQuery extends BasePolicytypeQuery {
} // PolicytypeQuery
是否有Propel生成器选项可将require()
语句添加到生成的代码中?或许我在项目中没有正确地自动加载Propel。为此,我按照本教程将Propel与CodeIgniter集成在一起:
http://codeigniter.com/wiki/Using_Propel_as_Model/
按照步骤3,我在自动加载的库中包含Propel。这应该解决我的问题吗?
答案 0 :(得分:1)
是的,应该。
PHP有一个名为autoloading classes的工具。我不知道推进,但如果它正确使用__autoload
,您就不需要再使用任何require
。
答案 1 :(得分:0)
Propel有自己的自动加载器,您应该使用它。
在CI的初始化阶段,您应该初始化Propel(参见CI链接中的第2步):
Propel::init('/path/to/database-conf.php');
该文件database-conf.php由convert-conf命令和自动加载器类映射生成,名为classmap-database-conf.php。前者包括后者 - 一旦你完成了,你的Propel类将全部自动加载。