Zend Frameworkの:クラスライブラリをオートローディング
-
23-09-2019 - |
質問
私はここで定義でクラスライブラリを持っている... /プロジェクト名/ライブラリ/ 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 I次のエラーを取得する:
致命的なエラー:クラスのMe_Myclassは 'X
の行に/home/myuser/work/projectname/application/controllers/SomeController.phpには見られません任意のアイデア?
潜在的に関連のある寄せ集めます:
私はアプリケーション/ライブラリの下に他のフォルダに定義したクラスとモデルを拡張していたときにオートローダが動作しているようです。
誰か私は試みたが、問題を解決するようには見えなかったし、この名前空間を使用したモデルの機能を壊すの追加マイナスの影響を持っていた、「デフォルト」を変更することを示唆しています。
解決
あなたクラスのニーズます:
class Me_Myclass
{
}
移動レベルアップあなたのライブラリフォルダので、フォルダ構造を持っていることます:
/
/application
/library
/public
そして、あなたのブートストラップ中)(_initAutoloadに以下を追加します:
Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
他のヒント
あなたは、このようなconfig.iniファイルに自動ロードディレクトリを定義することができます:
autoloaderNamespaces[] = "Me_"
;You could add as many as you want Classes dir:
autoloaderNamespaces[] = "Another_"
autoloaderNamespaces[] = "Third_"
100%の作品
私はsmack0007 @手段がZend_Loader_Autoloaderを使用して_initAutoload方法の内容を置き換えると思う::のgetInstance() - > registerNamespace( 'Me_');それは次のようになります。
protected function _initAutoload()
{
Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
わからない、これはあなたの問題ですが、私はちょうど最後の日を過ごし、半分(のWindowsからLinuxへの初めてのロードそれを)私自身も同様の問題を把握しようとしている場合。私判明は自分のライブラリーのフォルダー名の場合に盲目だった。
/library
/Tlib
は
(* NIX上)と同じではありません/library
/tlib
クラス名は、一般的に、この
でありますclass Tlib_FooMe {
...
}
希望、これは同様にぼんやりしている人を支援します。