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