ホームページ  >  記事  >  バックエンド開発  >  zendframeworkの自動読み込みについて

zendframeworkの自動読み込みについて

WBOY
WBOYオリジナル
2016-06-13 13:01:11875ブラウズ

zendframeworkの自動クラスローディングについて
ディレクトリ構造

<br />
zf-demo <br />
  application<br />
    controller<br />
      IndexController.php<br />
    models<br />
      User.php<br />
    services<br />
    views<br />
   Bootstrap.php<br />

このうちuser.phpのクラス名はModel_Userとなっており、IndexController.phpには $user = new Model_User();
という記述があります。
を実行するとエラーが報告されます 致命的なエラー: クラス 'Model_User' が D:lampsiteszf-demoapplicationcontrollersIndexController.php の 132 行目に見つかりません
オンラインで検索して答えを見つけてください
_initAutoload メソッドを Bootstarp.php に追加します
Bootstrap.php コード
<br />
<?php<br />
<br />
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {<br />
	protected function _initAutoload() {<br />
        $moduleLoader = new Zend_Application_Module_Autoloader(array(<br />
        'namespace' => '',<br />
        'basePath' => APPLICATION_PATH));<br />
        <br />
        /** auto load */<br />
        $autoloader = Zend_Loader_Autoloader::getInstance();<br />
        $autoloader->setFallbackAutoloader(true);<br />
        return $moduleLoader;<br />
    }<br />
  <br />
}<br />
<br />


再度実行すると、ユーザー クラスが正常にロードされます。

質問:
私の理解によれば、zend の自動ロードメカニズムは、クラス名のアンダースコアをパス区切り文字に置き換え、 include_path
の順序に従ってクラスをロードすることです。 この場合、Model_User はロードのために Model/User.php に変換されますが、ディレクトリにはモデル フォルダーがなく、モデルのみが正常にロードされるのはなぜですか?誰か説明してもらえますか?
------解決策---------

引用:
引用:

コードを見ることができます。

通常、Application_Model_User は次のようになります。あなたのパスは間違っています。

自動読み込み。1 つは上記の自動変換パスに基づいています。 2 つ目は、ディレクトリに従って関連するすべてのカテゴリを検索することです。

コントローラーでの自動ロードとブートストラップでの自動ロードでは同じクラスを使用できますが、パスを指定するだけです。


user.php のクラス名は Applic...

にするべきだということですか?
できる!これは一種のデフォルトです。少なくとも、クイック スタートの例ではこれが当てはまります。コマンドライン作成モデルユーザーは自動的にモデルを作成します。使用モデルフォルダー。
------解決策----------------------
通常、この種の不規則な名前空間は Zend_Loader_Autoloader_Resource を使用します。便宜上、フレームワーク アプリケーション自体の構造継承には Zend_Application_Module_Autoloader が実装されており、ソース コードを見るとわかります
。 以下のクラスのソースコード

/**
 * アプリケーション モジュール クラスのリソース ローダー
 *
 * @uses Zend_Loader_Autoloader_Resource
 * @category ゼンド
 * @package Zend_Application
 * @subpackage モジュール
 * @copyright 著作権 (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license http://framework.zend.com/license/new-bsd 新しい BSD ライセンス
 */
class Zend_Application_Module_Autoloader extends Zend_Loader_Autoloader_Resource
{
/**
* コンストラクター
*
* @param array
-----解決策---------
Zend_Config $options
* @return void
​​*/
パブリック関数 __construct($options)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。