2009-10-06 112 views
6

有沒有一種方法可以爲每個模塊建立模型?我有3個模塊,其中一個是「contacts」模塊。 我創建了它模塊/聯繫人/模型/模型Codes.php 代碼控制器Zend Framework模塊化應用程序,無法爲每個模塊加載模型,自動加載模型?

class Contacts_CodesController extends Zend_Controller_Action 
{ 

    public function init() 
    { 
     /* Initialize action controller here */ 
    $this->view->messages = $this->_helper->flashMessenger->getMessages(); 

    } 

    public function indexAction() 
    { 

    $codesTable = new Contacts_Model_Codes(); 

    } 

代碼型號:

class Contacts_Model_Codes extends Zend_Db_Table 
{ 
    protected $_name = 'codes'; 
} 

的錯誤,我得到: 致命錯誤:類'Contacts_Model_Codes'找不到/Applications/MAMP/htdocs/zf_site/application/modules/contacts/controllers/CodesController.php 26行

感謝

回答

5

您必須先註冊與自動加載器「Contacts_」命名空間。你可以爲此使用Zend_Application_Module_Autoloader。

$autoloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Contacts_', 
     'basePath' => dirname(__FILE__) . '/modules/cotacts', 
    )); 

這將在您提供的basePath內爲您的模塊創建以下映射。

api/   => Api 
forms/  => Form 
models/  => Model 
    DbTable/ => Model_DbTable 
plugins/  => Plugin 

如果使用Zend_Application到自舉你的應用程序,你不應該需要這個它」模塊,因爲文檔說:

When using module bootstraps with Zend_Application, an instance of Zend_Application_Module_Autoloader will be created by default for each discrete module, allowing you to autoload module resources.

+1

這僅僅是ZF 1.8屬實,在這個版本中添加的模塊自動加載和Zend_Application用它來引導模塊。 在舊版本中,您將需要使用Zend_Application_Resource_Modules – NDM 2009-10-06 10:58:29

2

我使用的是1.9版本。 這是我舉的一部分:

protected function _initAutoload() { 
    $modelLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '', 
        'basePath' => APPLICATION_PATH.'/modules/default') 

     ); 
} 

    protected function _initAutoloaders() 
    { 
     $this->getApplication()->setAutoloaderNamespaces(array('Eric_')); 
     return $this; 
    } 

    protected function _initPlugins() 
    { 
     $this->bootstrap('autoloaders'); 
     $this->bootstrap('frontController'); 

     // register the plugin for setting layouts per module 
     $plugin = new Eric_Plugin_Modularlayout(); 
     $this->frontController->registerPlugin($plugin); 
      return $modelLoader; 
    } 

插件Eric_Plugin_Modularlayout設定每個模塊的正確佈局。

我有3個模塊:default,ez,contacts。 有趣的是,在聯繫行爲中,我可以在ez/models目錄中調用模型。沒有問題。

18

我發現了這個問題。我忘了將自舉文件放入我的聯繫人模塊中。 現在一切正常,我可以讓我的模塊使用他們自己的模型。

class Contacts_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

} 
+5

同時將「resources.modules [] =」添加到您的application.ini – 2011-06-30 15:36:46

+0

謝謝,這對我有所幫助。我想知道爲什麼這兩件事都沒有被「zf create module x」所關注。有沒有你不想要他們的情況? – LinusR 2015-04-29 13:49:33

5

添加

resources.modules[] = 

要你的配置INI

6

我已經找到了解決辦法,我猜! :) 這是一個問題,當你在的application.ini文件中添加下一個資源

resources.frontController.defaultModule = "Default" 

,你也使用某種參數。我認爲這是一個錯誤。

實現模塊正確的方法是:

1 - 創建所需的模塊和 '默認' 模塊與ZF工具

2 - 在apllication.ini告訴ZF其中模塊是和其中那些模塊的控制器,以

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.frontController.moduleControllerDirectoryName = "controllers" 

使用已知

resources.modules = "" 

並設置:

resources.frontController.params.prefixDefaultModule = "" 

這一點很重要,因爲ZF工具將它設置爲 「1」。這是錯誤。 :)

並記住不要錯過默認模塊!

3 - 爲每個模塊創建引導文件,並把:

如果我的模塊是 'Evacol':

<?php 
class Evacol_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
} 

保存到/模塊/ Evacol/明顯

注意Evacol_ ...和..._ Module_Bootstr ...我的模塊的名稱擴展了正確的類。 請勿使用使用zf工具創建的引導程序文件的默認值。我做到了:)

不要修改任何其他的東西。這並不是必要的。

瞧!相信我。有用!

這是Zend框架1.10.8