Propel 1.6 - 关于包含的问题

时间:2011-08-13 20:33:04

标签: php codeigniter propel

如何避免向每个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。这应该解决我的问题吗?

2 个答案:

答案 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类将全部自动加载。