簡體   English   中英

Zend框架模塊無法找到/加載模型

[英]Zend Framework Modules can't find/load Models

由於一些令人沮喪的原因,我配置了一些模塊,這些模塊似乎工作正常,但是無法加載模塊模型。 如果我將模型移動到默認模型,則會加載它們,但是我無法獲取框架以在本地找到它們。

例:

我的模塊目錄是:

application \\ modules \\ books \\ models \\ books.php(書是我的模型)

class Application_Module_Books_Model_Books extends Zend_Db_Table_Abstract {}

我也試過..

Books_Model_Books,Model_Books,書籍,Modules_ ..您把它命名為我嘗試過的:)

我的控制器在“圖書”模塊中,並且是一個索引控制器,並且它永遠找不到本地模型。

我正在使用Application.ini,它是通過以下方式配置的:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

我在模塊目錄中有一個BootStrap:

Admin_Bootstrap類擴展了Zend_Application_Module_Bootstrap {}

我使用的是Zend Framework 1.10,以及一些想法。

剛剛為我解決的問題是將以下行添加到application.ini

resources.modules [] =

然后我將Bootstrap.php添加到模塊目錄(“ application \\ modules \\ books \\”)

class Books_Bootstrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoload()
    {
      $autoloader = new Zend_Application_Module_Autoloader(array(
           'namespace' => 'Books_',
           'basePath' => dirname(__FILE__)
      ));
      return $autoloader;
     }
}    

將書籍模型移至“ application \\ modules \\ books \\ models \\ Books.php”

class Books_Model_Books extends Zend_Db_Table_Abstract {...}

現在您應該能夠在IndexController中加載模型

$model = new Books_Model_Books();

在application.ini中,添加一條簡單的行:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

並在Bootstrap中的_initAutoload()方法中放置:

$front = $this->bootstrap("frontController")->frontController;
$modules = $front->getControllerDirectory();
$default = $front->getDefaultModule();

foreach (array_keys($modules) as $module) {
    if ($module === $default) {
        continue;
    }

    $moduleloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => $module,
        'basePath'  => $front->getModuleDirectory($module)));
}

確保每個模塊中的模型名稱都與

[name_module]_Model_[name_model]

在你的情況下,就像

class Books_Model_Books {
}

就是這樣:D

正確的類名稱為Books_Model_Books,但該類的文件名必須為Books.php(注意大寫的“ B”)。

您不應該在modules目錄中有一個引導程序,但是您可能確實希望每個模塊目錄都有一個引導程序,因此您需要一個類:

class Books_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

網址:application / modules / books / Bootstrap.php(再次注意大寫的“ B”)。

有關更多信息,請查看http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html上有關模塊資源自動加載程序的部分。

1-隨意刪除此cuz,您不再需要它:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

並將此代碼放入您的Bootstrap.php文件[application bootstrap]而不是模塊bootstrap中

public function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '' , 
'basePath' => dirname(__FILE__) . '/modules/'));
return $autoloader;
}

回到配置,您還需要添加

   resources.modules[] = ""    
   resources.frontController.defaultModule = "admin" 

這是我完整的配置文件:

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.defaultModule = "news"
resources.frontController.prefixDefaultModule = 1
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""
;resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
autoloaderNamespaces[] = "xxxxxx"

resources.db.adapter = "Mysqli"
resources.db.isdefaulttableadapter = true
resources.db.params.host = "localhost"
resources.db.params.dbname = "xxxxx"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.charset = "utf8"

希望我沒有錯過任何事情

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM