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 多模块配置 (三)

posted @ 2010-07-31 11:39  Zhou Hr  阅读(1847)  评论(0编辑  收藏  举报