うまくいけば、元の質問に答えるだけでなく、ここに提出されたいくつかの項目についていくつかの説明を提供するために、この応答を追加します。私はZF1.11のモジュールの積極的な開発者であり、私たちが維持しているいくつかのモジュールの1つで毎日説明しようとしていることを使用しています。
この回答が長かったことを前もってお詫び申し上げます。カバーして考慮すべきいくつかの項目があります。
まず、実装について。
私の知る限り、提供された次のスニペットは約1.8で機能し、1.11では必要ありません。
<?php
class Notifications_Bootstrap extends Zend_Application_Module_Bootstrap {
protected function _initLibraryAutoloader () {
return $this->getResourceLoader()->addResourceType('library', 'library', 'library');
}
}
ただし、以下で説明するいくつかの重要な要素があれば、以下は問題なく機能します。
protected function _initLibraryAutoloader () {
return $this->getResourceLoader()->addResourceType('library', 'library', 'Library_');
}
3番目のパラメーター(名前空間)にわずかな違いがあります。これを最もよく説明するのは、関数を次のように更新することです。
protected function _initLibraryAutoloader () {
$this->getResourceLoader()->addResourceType('library', 'library', 'Library_');
var_dump($this->getResourceLoader()->getResourceTypes());die;
}
出力は次のようになります。
Array
(
[dbtable] => Array
(
[namespace] => Admin_Model_DbTable
[path] => /path/to/trunk/application/modules/admin/models/DbTable
)
[mappers] => Array
(
[namespace] => Admin_Model_Mapper
[path] => /path/to/trunk/application/modules/admin/models/mappers
)
[form] => Array
(
[namespace] => Admin_Form
[path] => /path/to/trunk/application/modules/admin/forms
)
[model] => Array
(
[namespace] => Admin_Model
[path] => /path/to/trunk/application/modules/admin/models
)
[plugin] => Array
(
[namespace] => Admin_Plugin
[path] => /path/to/trunk/application/modules/admin/plugins
)
[service] => Array
(
[namespace] => Admin_Service
[path] => /path/to/trunk/application/modules/admin/services
)
[viewhelper] => Array
(
[namespace] => Admin_View_Helper
[path] => /path/to/trunk/application/modules/admin/views/helpers
)
[viewfilter] => Array
(
[namespace] => Admin_View_Filter
[path] => /path/to/trunk/application/modules/admin/views/filters
)
[library] => Array
(
[namespace] => Admin_Library
[path] => /path/to/trunk/application/modules/admin/library
)
)
これを3番目のパラメーターとして以前の「ライブラリ」と比較すると、なぜそれがこのような重要な違いを生むのかがすぐにわかります。
繰り返しになりますが、この時点で、プレフィックスが「Library_」のライブラリタイプを宣言しました。これは「Admin_Library」に変換されます。これを実装するには、メインのアプリケーションモジュールと同じように、わずかな調整を加えて、ライブラリフォルダをモジュールに配置します。管理モジュール固有のコントローラーアクション(Admin_Library_Controller_Action)を作成するには、クラス名がAdmin_Library_Controller_Actionのlibrary / Controller/Action.phpを使用します。これは最初は最も混乱するものですが、モジュールで使用する必要がある他のリソース名前空間と非常によく似ています。
これで技術的な説明は終わりです。これ以上読まない場合は、モジュールに固有のライブラリを用意し、完全に自己完結型にして、再利用可能なモジュールの簡単なコピー/貼り付けの実装を行うことができます。
ここで私が見た他の応答のいくつかについてのいくつかのコメントのために。
無限大
「構造に従うと、最終的に-Module1(Lib1、Lib2)-Module2(Lib1、Lib3)になる可能性があるため、必要なライブラリの複製を開始します。」
これは技術的には正しいですが、あちこちで同じライブラリを日常的に使用していることに気付いた場合、実際の開発スタイルでより多くの問題が明らかになります。通常、これらの一般的なアイテムは、Zendと同じ外部として使用する別のライブラリに保存され、メインのアプリケーションライブラリフォルダーのZendと一緒に配置されます。
すでにそれを行っている場合、追加の説明が必要になる可能性があると思われる場合は、名前空間を正しく使用していれば、ライブラリクラス名の衝突について心配する必要はまったくありません。短期間、複数のモジュールに同じコードのクラスが必要になる場合がありますが、これが発生したらすぐに、前述のZendに加えて共通ライブラリを検討する必要があります。
この回答が長かったことを改めてお詫び申し上げます。モジュールでのライブラリの実装を必要としているこの投稿に出くわす可能性のある人に役立つことを願っています。