2012-05-11 45 views
-2

因此,我一直在設計一個運行在Zend Framework 1.11上的應用程序,並且任何程序員都會在他看到重複的功能時想要去構建具有上述功能的基類。如何將您自己的庫添加到Zend Framework中

現在我的計劃是建立一個庫'我',所以我在應用程序的庫目錄中創建一個文件夾。所以它看起來像這樣

Project 
    Application 
    docs 
    library 
     My 
    public 
    test 

所以我創造了我的文件夾中BaseController類,然後決定安排的IndexController在我的應用程序擴展BaseController。

的Basecontroller看起來是這樣的:

class My_BaseController extends Zend_Controller_Action 
{ 

    public function indexAction() 
    { 
     $this->view->test = 'Hallo Wereld!'; 
    } 

} 

而且索引控制器看起來是這樣的:

class WMSController extends My_BaseController 
{ 

    public function indexAction() 
    { 
     parent::indexAction(); 
    } 

} 

正如勸通過了大量的資源我嘗試添加的命名空間在應用程序庫中。 ini使用該行

autoloadernamespaces.my = 「My_」 

但是,當我嘗試運行此應用程序對我收到以下錯誤

Fatal error: Class 'My_BaseController' not found in C:\wamp\www\ZendTest\application\controllers\IndexController.php

我在這裏錯過了什麼嗎?或者我只是一個木偶,應該嘗試一種不同的方法?

在此先感謝!

回答

3

你原始的方法將的application.ini爲你工作,你只要有一對夫婦您的設置存在問題。

你的application.ini應該有這樣一行: -

autoloadernamespaces[] = "My_" 

另外,你必須要小心你的類名,把你的基本控制器爲例,它應該是在library/My/Controller/Base.php,應該看起來像這一點: -

class My_Controller_Base extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     $this->view->test = 'Hello World!'; 
    } 
} 

然後,您可以使用它像這樣: -

class WMSController extends My_Controller_Base 
{ 
    public function indexAction() 
    { 
     parent::indexAction(); 
    } 
} 

所以,你有它幾乎是正確的,但只是缺少一些細節。值得了解Zend Framework中自動加載的工作原理和學習如何使用class naming conventions

+1

只需簡單提一下,擴展Zend_Controller_Action幾乎總是一個壞主意 - 通常最好是創建助手或插件。我從來沒有找到一個用於擴展Zend_Controller_Action的用例,這個用例不容易被混合資源,幫助器和插件測試/注入。 – shrikeh

+0

是的,我同意100%,但這個問題是關於添加自己的庫,使用OP自己的例子似乎更容易。謝謝,這裏有評論可能是好的。 – vascowhite

+0

感謝您回覆我的問題。我對Zend Framework的工作原理頗爲陌生,因此我不熟悉常用的最佳實踐。 @Shrikeh,我將有一個更詳細的看助手和插件,感謝警告:) –

2

我不知道.ini配置,但我想補充客戶庫,像這樣(的index.php):

require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance()->registerNamespace('My_'); 
+0

其實這是我的錯誤,我在上面的問題中糾正了它:) –

+0

好,請參閱我的版本。可能會幫助你。 – pltvs

+0

它的工作原理!非常感謝:) –

相關問題