2011-10-24 16 views
1

マイZendのアプリが作成されるのアプリケーション/モデル/からZend Frameworkの負荷マッパーを、すべてが順序であると思われるが、私のような何かをしようとするたび:代わりに、アプリケーション/モデル

$ accProducts =新しいApplication_Models_AccProductsMapper() ;

のみ取得:

警告:のinclude_once(アプリケーション/モデル/ AccProductsMapper.phpは):ストリームをオープンに失敗したん:ライン148上の/home/blah/blah/blah/Loader.phpでそのようなファイルやディレクトリを

ただし、AccProductsMapper.phpファイルはそのようなディレクトリに存在し、zendアプリケーション内のディレクトリはすべて小文字であるため、難しいです。

私はこの問題を解決するための何かを探しても、まったくいい結果が得られませんでした。各モジュールに追加


bootstrap.phpの

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initDoctype() 
    { 
     $this->bootstrap('view'); 
     $view = $this->getResource('view'); 
     $view->doctype('XHTML1_STRICT'); 
    } 

    protected function _initAutoload() 
    { 
     $moduleLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH)); 
     $autoloader = Zend_Loader_Autoloader::getInstance(); 
     $autoloader->registerNamespace(array('App','My_')); 
     return $moduleLoader; 
    } 
} 
+0

あなたの名前を変更してください。大文字と小文字が区別されているかのように作業する必要があります(システム上になくても)。さらに、CamelCaseを使用するために、Zendのすべての変曲点を数えることができます。 – prodigitalson

+0

ありがとう!しかし、うまくいきません...空白の画面しか表示されません... 他のコントローラでは、マッパーを呼び出す方法が次のようになっています。 $ var = new Application_Model_AccProductsMapper(); ridicuolus b/cと呼ばれるいわゆる「モデル」は単純に存在しませんが、「モデル」は1つです 私は何か間違っていますか? また、私はモジュールを使用していることを多くの記事で見てきましたが、これまではモジュールを使用していませんでしたか? – CABP

+0

'Application_Models_AccProductsMapper'のインスタンスを作成しようとしますが、クラスは' Application_Model_AccProductsMapper'という名前でなければなりません(モデルとモデルの違いに気を付けてください)。 **複数**バージョンの小文字は、大文字の**単数**バージョンを置くフォルダです。したがって、 'Foo_Model_Bar'クラスは' Foo/models/Bar.php'にあります。 –

答えて

2

標準Zend_Loader_Autoloader_Resourceクラスは<module-directory>/modelsのクラス接頭<ModuleNamespace>_Model_を搭載したモデルを探します。

デフォルトのモジュールでは、ネームスペースは設定のappnamespaceプロパティ(デフォルトはApplication)で定義されています。ディレクトリは通常applicationです。

私はあなたがそのモジュールでやっていること言うことができない、あなたの_initAutoload()方法としては例えば

<?php 
// application/models/AccProductsMapper.php 

class Application_Model_AccProductsMapper 
{ 
    // etc 

、クラスのプレフィックスApplication_Model_application/modelsにあなたのデフォルトのモジュールのモデルクラスを作成し、要約しますあなたがそれをまったく必要としないことをアドバイスします。設定ファイルにPEARスタイルの名前空間を登録することができます。たとえば、

autoloadernamespaces.App = "App_" 
autoloadernamespaces.My = "My_" 
+0

これは私のプロジェクトの構造がまさに今、同じディレクトリ、同じ接頭辞、同じクラス名でも同じように "ストリームを開けませんでした"という同じ警告を受けているのとまったく同じです。 btw私はBasePathとしてAPPLICATION_PATHを使用してBootstrap.phpファイルで_initAutoload()関数を使用しました – CABP

+1

@CABPあなたの質問には、そうではありません。あなたの質問では、クラス名は 'Models'(複数形)を使います。 'Model'(単数)でなければなりません。 '_initAutoload()'メソッドを投稿できますか?他のオートローダーをスタックに追加しない限り、オートローダーをカスタマイズする理由はありません。 – Phil

+0

@CABP私はあなたのコードをあなたの質問に移しました。私の更新された答えを参照 – Phil