2011-08-13 4 views
0

私のCIコントローラのそれぞれに20種類のrequire()ステートメントを追加しないでください。Propel 1.6 - 質問について

私の前のプロジェクトである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 

は、生成されたコードにrequire()ステートメントを追加するPropelジェネレータのオプションがありますか?あるいは、私のプロジェクトでPropelを正しく自動ロードしていないかもしれません。そのために、私はCodeIgniterのではPropelを統合する上で、このチュートリアルに従っ:

ステップ3パー

http://codeigniter.com/wiki/Using_Propel_as_Model/

、私は自動的にロードライブラリ内のPropelを含めています。これで問題は解決するはずですか?

答えて

1

はい、そうです。

PHPにはautoloading classesという機能があります。私はpropelをよく知っていますが、正しく__autoloadを使用している場合は、もうrequireを使用する必要はありません。

0

Propelには独自のオートローダーがあります。

CIでの初期化段階で

、あなたは、このようにPropelを初期化する必要があります(CIリンクのステップ2を参照してください):ファイル、データベース-conf.php、変換-confのコマンドによって生成されていることを

Propel::init('/path/to/database-conf.php'); 

autoloaderクラスマップと一緒に、classmap-database-conf.phpと呼ばれます。前者には後者が含まれています。いったんPropelクラスがすべて自動的にロードされると、それが完了します。