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了。

  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3278471.html
Copyright © 2011-2022 走看看