ホームページ > バックエンド開発 > PHPチュートリアル > zendframework クラスの自動ロードに対処する方法

zendframework クラスの自動ロードに対処する方法

WBOY
リリース: 2016-06-13 13:51:22
オリジナル
895 人が閲覧しました

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

HTMLコード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

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

ログイン後にコピー

user.phpのクラス名はModel_Userで、IndexController.php内に$を呼び出すような文がありますuser = new Model_User();
実行時にエラーが報告されます
致命的なエラー: クラス 'Model_User' が D:lampsiteszf-demoapplicationcontrollersIndexController.php の 132 行目に見つかりません
オンラインで検索した後、回答
Bootstarp.php に _initAutoload メソッド
Bootstrap.php コード
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    protected function _initAutoload() {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH));
        
        /** auto load */
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->setFallbackAutoloader(true);
        return $moduleLoader;
    }
  
}


ログイン後にコピー


を追加して再度実行すると、ユーザー クラスがロードされます

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

-----解決策--------------------------
ディスカッション

引用:

コードを見てください。

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

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

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


user.php のクラス名は Applic にする必要があるということですね...

------解決策----------------------
通常、この種の不規則な名前空間は Zend_Loader_Autoloader_Resource を使用します。便宜上、フレームワーク アプリケーション自体の構造継承には Zend_Application_Module_Autoloader が実装されており、これは
次のクラスのソース コード

/***/
クラス Zend_Application_Module_Autoloader は Zend_Loader_Autoloader_Resource を拡張します
{
/**
* アプリケーション モジュール クラスのリソース ローダー
*
* @uses Zend_Loader_Autoloader_Resource
* @category Zend
* @package Zend_Application
* @subpackage Module
* @copyright Copyright ( c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd 新しい BSD ライセンス
 */
public function __construct($options)
{
parent::__construct($options) );
$this-> ;initDefaultResourceTypes();
}

/**
* コンストラクター
*
* @param array|Zend_Config $options
* @return void
*/
public function initDefaultResourceTypes()
{
$basePath = $this->getBasePath();
$this->addResourceTypes(array(
'dbtable' => array(
'namespace' => 'Model_DbTable',
'パス' => 'models/DbTable' ,
),
'mappers' => array(
'namespace' => 'Model_Mapper',
'path' => /mappers',
),
'form' => array(
'namespace' => 'Form',
'path' => 'forms',
) ,
'モデル' => ; array(
'名前空間' => 'モデル',
'パス' => 'モデル',
),
'プラグイン' = > array(
'名前空間' => 'プラグイン',
'パス' => 'プラグイン',
),
'サービス' =>名前空間' => 'サービス',
'パス' => 'サービス',

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート