1

私のzendアプリが作成され、すべてが正常に動作しているように見えますが、次のようなことをしようとするたびに:

$ accProducts = new Application_Models_AccProductsMapper();

取得するだけ:

警告:include_once(Application / Models / 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;
    }
}
4

1 に答える 1

2

各モジュールに追加された標準Zend_Loader_Autoloader_Resourceクラスは、にクラスプレフィックスが付いたモデルを検索し<ModuleNamespace>_Model_ます<module-directory>/models

デフォルトモジュールの場合、名前空間はconfigのappnamespaceプロパティで定義されます(デフォルトはApplication)。通常、ディレクトリはapplicationです。

要約すると、デフォルトのモジュールモデルクラスapplication/modelsをクラスプレフィックス付きApplication_Model_で作成します。

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

class Application_Model_AccProductsMapper
{
    // etc

あなたの_initAutoload()方法に関しては、私はあなたがそのモジュールローダーで何をしているのかわからないので、それをまったく必要としないようにアドバイスします。設定ファイルにPEARスタイルの名前空間を登録できます。

autoloadernamespaces.App = "App_"
autoloadernamespaces.My = "My_"
于 2011-10-24T22:37:55.993 に答える