zoukankan      html  css  js  c++  java
  • zend framework多模块配置

            上次接触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文件为以下内容。

          

    <?php
    
    class 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,修改为以下内容:

    <?php
    
    class 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,修改为以下内容:

    <?php
    
    class 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_MYSQL
    db.params.host = localhost
    db.params.dbname = voice_sms
    db.params.username = root
    db.params.password = 123456
    db.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();

          到这里就一切OK了。

  • 相关阅读:
    【BZOJ1029】[JSOI2007] 建筑抢修(堆优化贪心)
    【CF799B】T-shirt buying(一道很水的小根堆)
    【BZOJ1076】[SCOI2008] 奖励关(状压DP)
    【BZOJ1087】[SCOI2005] 互不侵犯King(状压DP)
    【BZOJ3209】花神的数论题(数位DP)
    【BZOJ1833】[ZJOI2010] count 数字计数(数位DP)
    【洛谷】CYJian的水题大赛 解题报告
    【洛谷3959】宝藏(随机算法乱搞)
    【洛谷2709】小B的询问(莫队模板题)
    【洛谷2403】[SDOI2010] 所驼门王的宝藏(Tarjan+dfs遍历)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3279958.html
Copyright © 2011-2022 走看看