zend framework多模組配置

來源:互聯網
上載者:User

        上次接觸zend framework已經很久遠了,10年的事情了。最近在做一個項目,時間不緊,就又把ZF拿出來折騰。而我發現以前做ZF的記憶已經在我腦中如夢幻泡影,消失無蹤,為了配置多模組還又去查了資料,為了避免此種情況再次發生,做個記錄吧。

        首先,我們要建立一個ZF項目,目錄結構如下。

     

       我們想要配置多模組呢,首先要在,application下面建一個modules檔案夾,然後建立模組檔案夾,這裡我以default和admin舉例。default為前台,admin為後台,符合最基礎的網站所需了。在modules下面建立default以及admin檔案夾,然後分別把controllers,models以及views剪下到這兩個檔案夾內。此時,檔案目錄如下所示。並且將Bootstrap.php檔案分別複製到兩個目錄裡。

      

          首先,我們去修改application.ini檔案。刪除以下這行。       

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

         然後添加以下內容。

resources.frontController.controllerDirectory.default =APPLICATION_PATH "/modules/default/controllers"resources.frontController.controllerDirectory.admin =APPLICATION_PATH "/modules/admin/controllers"resources.FrontController.moduleDirectory =APPLICATION_PATH "/modules"resources.FrontController.moduleControllerDirectoryName ="controllers"resources.FrontController.defaultModule= "default"resources.modules[] = ""

       這裡我們看到,我們設定了default模組為預設模組。也就是說default模組裡面的controller和model的類名都不需要另外處理,而其它模組裡面的controller及model的類名都需要加模組首碼哦,這裡後面會詳細講到。

       然後我們去修改application/Bootstrap.php檔案為以下內容。

      

<?phpclass Bootstrap extends Zend_Application_Bootstrap_Bootstrap{protected function _initAppAutoload() {$autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'App','basePath'  => dirname(__FILE__),));return $autoloader;}}

      到這裡還沒有結束,我們需要去修改對應的模組裡面的Bootstrap.php檔案的內容。

      先修改application/modules/default/Bootstrap.php,修改為以下內容:

<?phpclass Default_Bootstrap extends Zend_Application_Module_Bootstrap {    protected function _initAutoload() {      $autoloader = new Zend_Application_Module_Autoloader(array(              'namespace' => '',              'basePath' => APPLICATION_PATH . '/modules/default'));      return $autoloader;      } }

      然後再修改為 application/modules/admin/Bootstrap.php,修改為以下內容:

<?phpclass Admin_Bootstrap extends Zend_Application_Module_Bootstrap {    protected function _initAutoload() {      $autoloader = new Zend_Application_Module_Autoloader(array(              'namespace' => '',              'basePath' => APPLICATION_PATH . '/modules/admin'));      return $autoloader;      } }

      以上的修改要注意兩點,第一,注意類名需要加模組首碼,第二,注意模組裡面的檔案名稱繼承的是Zend_Application_Module_Bootstrap而不是Zend_Application_Bootstrap_Bootstrap。如果繼承檔案錯誤的話,會報錯:Maximum function nesting level of '100' reached, aborting!

      我們再進行最後一步,就可以進行多模組的訪問了。因為default是預設模組,所以我們不需要去修改,我們要去修改的是admin模組裡面的內容。

     開啟admin模組裡面的IndexController.php檔案,修改類名為:

class Admin_IndexController extends Zend_Controller_Action{}

      此時我們可以測試一下,我們訪問http://localhost/project/public則訪問的是default模組的首頁,當訪問http://localhost/project/public/admin時訪問的是後台首頁。

     

       我們說完了多模組配置的contoller訪問之後,再來提一下model的訪問。

       首先我們去修改設定檔,application.ini。在production中添加如下內容。

db.adapter = PDO_MYSQLdb.params.host = localhostdb.params.dbname = voice_smsdb.params.username = rootdb.params.password = 123456db.params.charset = UTF8

        然後我們去串連資料庫,在application/Bootstrap.php裡面添加這個方法

protected function _initDatabase() {$options = $this->getApplication()->getOptions();$db = Zend_Db::factory( $options[ 'db' ][ 'adapter' ], $options[ 'db' ][ 'params' ] );Zend_Db_Table_Abstract::setDefaultAdapter( $db );Zend_Registry::set( 'DB', $db );return $db;}

       先說default模組。

       在application/default/models裡面添加一個model檔案,SmsInformation.php,此檔案的內容為:

class Model_SmsInformation{private $_tableName;private $_connect;/** * construct function */public function __construct() {$this->_tableName = 'smsinformation';$this->_connect= Zend_Registry::get( 'DB' );}}

     我們在在application/default/controller/IndexController.php中用以下語句則可執行個體化此model  

$smsInformationModel = new Model_SmsInformation();

      然後說admin模組。

     在application/admin/models裡面添加一個model檔案,SmsInformation.php,此檔案的內容為:

class Admin_Model_SmsInformation{private $_tableName;private $_connect;/** * construct function */public function __construct() {$this->_tableName = 'smsinformation';$this->_connect= Zend_Registry::get( 'DB' );}}

       請注意,類名有模組首碼哦。

      我們在在application/admin/controller/IndexController.php中用以下語句則可執行個體化此model  

$smsInformationModel = new Admin_Model_SmsInformation();

     
       最後還有layout配置,在兩個模組下面分別建立layouts/scripts檔案夾,裡面放入預設布局檔案layout.phtml。

       目錄結構如下:

      

       layout.phtml的檔案內容為:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><?php $baseUrl = $this->baseUrl();?><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><?php echo $this->headTitle();$this->headLink()->appendStylesheet($baseUrl . "/css/admin.css");      echo $this->headLink();      $this->headScript()->appendFile($baseUrl . "/js/jquery-2.0.2.min.js");      echo $this->headScript();     ?></head><body><div class="container"><?php echo $this->layout()->content; ?></div></body></html>

       將application.ini中加入兩句話:

default.resources.layout.layoutPath = APPLICATION_PATH "/modules/default/layouts/scripts/"admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts/"

      對應的模組會去找到對應的layout。

      到這裡就一切OK了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.