2009-06-10 7 views
1

Zend Frameworkアプリケーションツールで作成されたデフォルトのフレームワークコードを使用しています。Default_<*>_<*>というクラスが自動的に正しいディレクトリからロードされるように、いくつかのオートローダーマジックを追加しました。この場合はDefault_Model_TableNameです。Zend_DB_Table_Abstractの関係

<?php 
$categories = new Default_Model_ProjectCategories(); 
$category = $categories->find('1'); 
$category->findProjects(); 

アプリケーション/モデル/ ProjectCategories.php:

<?php 

class Default_Model_ProjectCategories extends Zend_Db_Table_Abstract { 
    protected $_name = 'categories'; 
    protected $_dependentTables = array('Projects'); 
} 

アプリケーション/モデル/ Projects.php:

<?php 

class Default_Model_Projects extends Zend_Db_Table_Abstract { 
    protected $_name = 'projects'; 

    protected $_referenceMap = array(
     'Category' => array(
      'columns'   => 'cid', 
      'refTableClass'  => 'ProjectCategories', 
      'refColumns'  => 'id', 
      'onUpdate'   => self::CASCADE, 
      'onDelete'   => self::CASCADE, 
     ) 
    ); 

} 

私は何をしようとしていますと、以下のとおりです。

Projects.phpが見つからないというエラーが表示されたり、ファイルがProjectsという名前のクラスは含まれていません。

その時点で、私はフレームワーク(/../library/)によって設定されたインクルードパスにProjects.phpを配置してファイルが見つかりましたが、今は私のディレクトリ構造全体が失われています。 Default_Model_ProjectsからProjectsに名前を変更する必要がありました。私は元の場所に戻ってファイルを置く場合は動作するようにすべてを取得し、

protected $_dependentTables = array('Default_Model_Projects'); 

protected $_dependentTables = array('Projects'); 

を変更することができる午前これも私の->findProjects()が今->findDefault_Model_Projects()なることを意味します。

findProjects()を照会するときに、Default_Model_Projectsをインスタンス化する必要があると伝える方法はありますか?これはZend Frameworkから抜けているものなのですか、それともそれが属していない方法で何かを細めにしようとしていますか?この問題をどうやって解決しましたか?

答えて

1

この問題は、新しいAutoloaderによって導入された可能性があります。また、名前空間のクラス(たとえば、あなたの名前の前に付いているもの)をロードする方が好きかもしれません。

私のアプリケーションでは、単に「プロジェクト」のようなモデルに名前を付け、別のモデルフォルダをそのアプリケーションのインクルードパスに追加します。これは1つの解決策です。残念ながら、名前空間モデルを正しくロードする方法がわかりませんが、Zend_Loaderを詳しく見てみることをお勧めします。また、pluginLoadersも可能です。

protected $_dependentTables = array('Default_Model_Projects'); 
-1

変更

protected $_dependentTables = array('Projects'); 

私はApp_TableNameに私のモデルクラスを縮小する

 
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => APPLICATION_PATH, 
    'namespace' => 'App', 
)); 
$resourceLoader->addResourceType('model', 'models/', ''); 

ような何かを行うことができるように使用されるが、その、今働いていないように思えます...

+0

あなた私の全体の質問を読んでいない... –

+1

haha​​、申し訳ありません:)私はそれを逃しました:) * public function findProjects(){$ this-> findUgly_Long_Name();} * –