某人如何自動加載每個模塊的每個表單和模型?請看下面的文件結構:自動加載Zend中每個模塊的表單和模型?
application/
modules/
foo/
forms/
Register.php
models/
Account.php
Bootstrap.php
bar/
forms/
Publish.php
models/
Article.php
Bootstrap.php
Bootstrap.php
而且例如,在富/ bootstrap.php中您有以下(非功能性)代碼:
class Foo_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoLoad()
{
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH . '/modules/foo',
'namespace' => 'Foo',
));
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model');
return $loader;
}
}
基本問題:引導程序如何進行修改,以便它可以從Foo模塊加載每個表單和模型?
額外問題:是否有可能有加載從每模塊形式和車型全球自動加載磁帶機?如果是這樣,怎麼樣?
編輯(有關該問題的最常見的問題):
默認的Zend命名約定被用於類。如
Bar_Model_Article
,Bar_Model_Mapper_Article
,Bar_Model_DbTable_Article
,Bar_Form_Publish
,...(而且被放置在各自的文件夾。)它不只是一個模塊沒有得到它的類加載,它的所有的人。
使用帶有多個模型,映射器,dbtables和表單的普通no-module應用程序時,使用Zend自動加載器自動加載類沒有問題。
修復
由於@Tim噴泉提到的模塊白手起家都沒有運行,這意味着沒有自動加載的發生的真實烤到Zend。最終,我發現問題出在我的情況下。我不得不從我的配置中刪除以下行:
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
同意,全局bootstrap不再工作了;但比模塊引導程序無法正常運行要好得多。如果有人知道如何擁有全球引導,請隨時發表評論。希望這可以幫助其他類似問題的人。
你需要什麼?您可以使用RecursiveDirectoryIterator(http://php.net/manual/en/class.recursivedireiteiteite.php)遞歸地遍歷所有模塊目錄並加載所有文件。 – Zyava 2011-04-09 10:37:17
@Zyava我寧願採用正確的方式,而不是簡單的方式。 Zend優化了類加載,這對於網站和開發人員來說總是一個優點。無論如何,感謝您的鏈接,我會看看它。 – levivanzele 2011-04-09 12:26:42