• Zend Framework 多模块配置 (二)


    

    续 Zend Framework 多模块配置 (一)

    4)启动bootstrap文件:

    全局bootstrap文件 (repos/application/botstrap.php)

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    
        /**
         *加载一些配置参数
         */
     protected function _initConfiguration() {
    
         //取得配置参数
      $app = $this->getApplication();
         $config = $app->getOptions();
    
         if ( APPLICATION_ENV == 'development' ) {
          error_reporting( E_ALL & E_STRICT );     //设定错误报告级别
          if ( isset( $config[ 'phpsettings' ] ) ) {
           foreach ( $config[ 'phpsettings' ] as $setting => $value ) {
            ini_set( $setting, $value );     //设定是否报告错误
           }
          }
         }
        }
    
        /**
         *自动加载任意的命名空间
         *@param $autoloader 自动加载器对象
         */
     protected function _initAutoload() {
    
      $autoloader = Zend_Loader_Autoloader::getInstance();
      $autoloader->setFallbackAutoloader( true );   //开启自动加载器
    
      return $autoloader;
        }
    
    
        /**
         *取得前端控制器配置
         *@param $controller 前端控制器对象
         */
        protected function _initController() {
    
         $this->bootstrap( 'FrontController' );
         $controller = $this->getResource( 'FrontController' );
      $modules = $controller->getControllerDirectory();    //得到模块控制器路径
    
      $controller->setParam( 'prefixDefaultModule', true );  //开启缺省模块的命名空间
    
            //注册插件类
            $controller->registerPlugin( new Personal_Plugin_Log( new Zend_Log() ) )                                       //日志插件
                       ->registerPlugin( new Personal_Plugin_Loader( $modules ) );                                         //模块插件
    
         return $controller;
        }
    
    
        /**
         *取得所有Http数据
         *@param $request Http数据对象
         */
        protected function _initRequest() {
    
            $this->bootstrap( 'FrontController' );
            $front = $this->getResource( 'FrontController' );
            $request = $front->getRequest();
         if ( null === $front->getRequest() ) {
                $request = new Zend_Controller_Request_Http();
                $front->setRequest( $request );
            }
    
         return $request;
        }
    
        /**
         *取得配置参数并注册数据库
         *@param $db 数据库对象
         */
     protected function _initDatabase() {
    
      $options = $this->getApplication()->getOptions();
    
            //Zend_Debug::dump( $options );
    
            $db = Zend_Db::factory( $options[ 'database' ][ 'adapter' ], $options[ 'database' ][ 'params' ] );
            Zend_Db_Table_Abstract::setDefaultAdapter( $db );
            Zend_Registry::set( 'DB', $db );
    
            return $db;
     }
    
        /**
         *加载所有模块
         */
        protected function _initModules() {
    
            // 加载所有模块(必不可少)
            //Call to prefent ZF from loading all modules
        }
    
    }//end class
    
    

    default模块bootstrap文件 (repos/application/modules/default/botstrap.php)

    /**
     *模块Bootstrap程序
     */
    class Default_Bootstrap extends Zend_Application_Module_Bootstrap
    {
    	protected $_moduleName = 'default';        //模块名称
    
        /**
         *包含路径模块下models文件所在路径
         */
    	protected function _initAutoload() {
    
            //set_include_path:包含路径
        	set_include_path( implode( PATH_SEPARATOR, array(
    
    		    //realpath:符号链接和相对路径引用转换为相应的绝对路径
    		   realpath( APPLICATION_PATH . '/modules/' . $this->_moduleName . '/models' ),
                                      get_include_path(),
    		) ) );
        }
    
        /**
         *设置站点视图变量
         *@param $view 视图对象
         */
    	protected function _initView() {
    
    		$view = new Zend_View();
    		$view->setEncoding( 'UTF-8' );
    		$view->doctype( 'XHTML1_STRICT' );
    		$view->headMeta()->appendHttpEquiv( 'Content-Type', 'text/html;charset=utf-8' );
     		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
     			'ViewRenderer'
     		);
     		$viewRenderer->setView( $view );
    
     		return $view;
    	}
    
    }//end class
    
    

     

    6)插件文件:

    控制器插件 (/repos/library/Personal/Plugin/Loader.php)

    /**
     *控制器插件类
     *@param $modulesList 模块的路径
     */
    class Personal_Plugin_Loader extends Zend_Controller_Plugin_Abstract
    {
    	protected $_modules;
    
    	public function __construct( array $modulesList )	{
    
    		$this->_modules = $modulesList;
    	}
    
    	/**
         *在分发循环(dispatch loop)前被调用
         */
    	public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request ) {
    
    		$module = $request->getModuleName();     //取得模块名
    
    		if ( !isset( $this->_modules[ $module ] ) ) {
    			throw new Exception( "Module does not exist!" );
    		}
    
    		$bootstrapPath = $this->_modules[ $module ];
    
    		//dirname:返回路径中的目录名称
    		$bootstrapFile = dirname( $bootstrapPath ) . '/Bootstrap.php';
    
    		//模块名称首字母大写(ucfirst:字符串首字母大写)
    		$class         = ucfirst( $module ) . '_Bootstrap';
            $application   = new Zend_Application(
            	APPLICATION_ENV,
        		APPLICATION_PATH . '/modules/' . $module . '/configs/module.ini'
    		);
    
            if ( Zend_Loader::loadFile( 'Bootstrap.php', dirname( $bootstrapPath ) )
            	&& class_exists( $class ) ) {               //class_exists:检查类是否已定义
                $bootstrap = new $class( $application );
                $bootstrap->bootstrap();
            }
    	}
    
    }//end class  
     

     

    日志插件 (/repos/library/Personal/Plugin/Log.php)

    /**
     *日志记录器插件类
     *该插件一定要在前端控制器run()前调用
     *@param $log Zend_Log 对象
     */
    class Personal_Plugin_Log extends Zend_Controller_Plugin_Abstract
    {
    
    	public function __construct( $log )	{
    
    		//过滤所有优先级低于ERR的消息
    		$log->addFilter( new Zend_Log_Filter_Priority( Zend_Log::ERR ) );
    
    		//创建一个Writer对象,并且在指定目录创建一个web.log日志文件
    		$logWriter = new Zend_Log_Writer_Stream( BASE_PATH . '/../data/log/application.log' );
    
    		//创建一个Formatter对象
    		$logFormat = '%timestamp% %priorityName% %message%' . "\n";
    		$logWriter->setFormatter( new Zend_Log_Formatter_Simple( $logFormat ) );
    
    		//将Writer对象添加到Log对象中
    		$log->addWriter( $logWriter );
    
    		//将日志对象保存到注册表中以便随时访问
    		Zend_Registry::set( 'log', $log );
    	}
    
    }//end clas 

     

    转至 Zend Framework 多模块配置 (三)

  • 相关阅读:
    iOS8之后,UITableViewRowAction实现滑动多个按钮
    关于UINavigationController的一些技巧
    NSRegularExpression 使用
    UIWindow
    SVN:The working copy is locked due to a previous error (二)
    iOS监听电话来电、挂断、拨号等
    UIDeviceOrientation 和 UIInterfaceOrientation
    java_day03
    java_day 02
    java_day_02
  • 原文地址:https://www.cnblogs.com/showblog/p/1789246.html
Copyright © 2020-2023  润新知