8

ここで定義されているクラスライブラリがあります.../projectname / library / Me / Myclass.phpは次のように定義されています:

<?php
class Me_Myclass{
}
?>

私は次のブートストラップを持っています:

<?php

/**
 * Application bootstrap
 * 
 * @uses    Zend_Application_Bootstrap_Bootstrap
 */
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    /**
     * Bootstrap autoloader for application resources
     * 
     * @return Zend_Application_Module_Autoloader
     */
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Default',
            'basePath'  => dirname(__FILE__),
        ));
        $autoloader->registerNamespace('Me_');
        return $autoloader;
    }

    /**
     * Bootstrap the view doctype
     * 
     * @return void
     */
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }

    /**
     * Bootstrap registry and store configuration information
     * 
     * @return void
     */
    protected function _initRegistry()
    {
      $config = new Zend_Config_Ini(APPLICATION_PATH . 
                                      '/configs/application.ini', APPLICATION_ENV,
                                      array('allowModifications'=>true));
      Zend_Registry::set('configuration', $config);
    }

}

私のコントローラーでは、次のようにクラスをインスタンス化しようとしています。

<?php
class SomeController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $classMaker=new Me_Myclass();
    }
}
?>

http:/something.com/projectname/some?id = 1に直接移動すると、次のエラーが発生します。

致命的なエラー:クラス'Me_Myclass'が行xの/home/myuser/work/projectname/application/controllers/SomeController.phpに見つかりません

何か案は?

潜在的に適切なその他:

オートローダーは、application/libraryの下の他のフォルダーで定義したクラスでモデルを拡張しているときに機能するようです。

誰かが「デフォルト」を変更することを提案しましたが、それは問題を修正するようには見えず、この名前空間を使用するモデルの機能を壊すという追加の悪影響がありました。

4

4 に答える 4

13

クラスの名前はMe_Myclassである必要があります。

class Me_Myclass
{
}

ライブラリフォルダを1レベル上に移動して、フォルダ構造を作成します。

/
    /application
    /library
    /public

次に、ブートストラップで_initAutoload()に以下を追加します。

    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
于 2010-01-28T08:25:18.083 に答える
2

次のように、config.iniファイルで自動ロードディレクトリを定義できます。

autoloaderNamespaces[] = "Me_"


;You could add as many as you want Classes dir:
autoloaderNamespaces[] = "Another_"
autoloaderNamespaces[] = "Third_"

100%動作します

于 2012-03-12T06:57:51.923 に答える
1

@ smack0007は、_initAutoloadメソッドの内容をZend_Loader_Autoloader :: getInstance()-> registerNamespace('Me_');に置き換えることを意味すると思います。したがって、次のようになります。

protected function _initAutoload()
{
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
于 2010-06-16T05:30:04.580 に答える
0

これがあなたの問題であるかどうかはわかりませんが、私は最後の1日半を費やして、私自身の同様の問題を理解しようとしました(WindowsからLinuxに初めてロードする)。私は自分のライブラリのフォルダ名の大文字小文字を知らなかったことがわかりました。

/library
    /Tlib

(* nix上)と同じではありません

/library
    /tlib

クラス名は通常これです

class Tlib_FooMe {
 ...
}

これが同様にぼんやりしている人に役立つことを願っています。

于 2010-07-08T09:46:16.727 に答える