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

转载于:https://www.cnblogs.com/showblog/archive/2010/07/31/1789246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

固定速率与固定延迟– RxJava常见问题解答

如果您使用的是纯Java,从版本5开始,我们有一个方便的调度程序类,该类允许以固定速率或固定延迟运行任务: import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;ScheduledExecutorServ…

cpta 好像有漏洞

https://kwt.cpta.com.cn/转载于:https://www.cnblogs.com/heikeboys/p/7173543.html

通过Spring Boot使用MySQL JDBC驱动程序

在本文中,我将向您展示如何将MySQL数据库与Spring Boot应用程序连接。 本文使用的工具包括: Spring Boot 1.5.6版本 MySQL 5.7.X 马文 Java 8 Spring Data JPA 1 –项目结构 项目结构是典型的Maven结构。 2 –项目依赖性 请注意,父母…

如何开启O2优化

O2环境会使你的程序跑的特别快,然而大多数正式考试都不能开O2 然而平时做有些题强制开O2,会出现在本机运行正确,但是交上去RE的情况,这时你就要开O2了. 例如在本机运行时会有下标为-但可以运行,而O2你就会RE 那么如何开呢 类似这样 #include<bits/stdc.h> using namespac…

数颜色

此数颜色非彼数颜色, 彼者带修莫队,主席树,树套树,分块,权值线段树皆可A之 而此者带修莫队,树套树,分块皆不可A之 此者异常之简单也,而数据异常之傻逼也,卡我分块者也,卡我权值线段树者也 从11.00即开始卡常,然而不让我过 对于分块 使用register inline fread 展开 不写函数 二…

jax-ws cxf_走向REST:将Tomcat嵌入Spring和JAX-RS(Apache CXF)

jax-ws cxf这篇文章是上一篇文章的逻辑延续。 唯一的区别是我们将使用的容器&#xff1a;它将是我们的老兄Apache Tomcat而不是Jetty 。 令人惊讶的是&#xff0c;嵌入最新的Apache Tomcat 7非常容易&#xff0c;因此现在让我展示一下。 我不会重复完整的上一篇文章 &#xff0…

深入理解C指针第一章小结1

1.1 指针和内存&#xff0c;C程序在编译后&#xff0c;会以三种形式使用内存。 (1) 静态/全局内存&#xff1a;在程序开始时分配&#xff0c;程序结束才消失&#xff0c;所有函数都能访问全局变量&#xff0c;static静态变量的作用域局限在定义它们的函数内部 (2)自动内存&…

WSO2注册表安装简介

这篇文章基于有关注册表安装及其工作方式等常见问题。以下是人们提出的主要问题&#xff1a; 1&#xff09;。 安装如何工作&#xff1f; 2&#xff09;。 Config Registry和Governance Registry有什么区别&#xff1f; 3&#xff09;。 可以将H2以外的数据库用于本地注册表…

[Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

运用PyTorch动手搭建一个共享单车预测器

本文摘自 《深度学习原理与PyTorch实战》 我们将从预测某地的共享单车数量这个实际问题出发&#xff0c;带领读者走进神经网络的殿堂&#xff0c;运用PyTorch动手搭建一个共享单车预测器&#xff0c;在实战过程中掌握神经元、神经网络、激活函数、机器学习等基本概念&#xff0…

jax-rs jax-ws_通过JAX-WS Provider在Web服务中利用MOXy

jax-rs jax-ws在以前的文章中&#xff0c;我演示了如何将EclipseLink JAXB&#xff08;MOXy&#xff09;直接集成到WebLogic&#xff08;从12.1.1开始&#xff09;和GlassFish&#xff08;从3.1.2开始&#xff09;的JAX-WS实现中 。 在本文中&#xff0c;我将演示如何通过使用J…

3个经常被忽略的APM关键功能

APM核心功能已不再足够。 市场领先的应用超越了以往&#xff0c;设置了其他人必须匹配的新标准。 每当任何针对消费者或企业的Web应用程序达到新的性能峰值时&#xff0c;都会为用户期望值设定基准。 这可能不公平或不合理&#xff0c;但这就是市场运作的方式。 当某人出于个…

NOIP模拟测试13「矩阵游戏·跳房子·优美序列」

矩阵游戏 考试时思路一度和正解一样&#xff0c;考试到最后还是打了80分思路&#xff0c;结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值&#xff0c;每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点*行增倍的数量就行了 for(ll i1;i<n;i…

一次测试

$\leq$ $\in[x,y]$ 转载于:https://www.cnblogs.com/znsbc-13/p/11304153.html

java的xml面试题_Java程序员的10个XML面试问答

java的xml面试题XML面试问题在各种编程工作面试中非常受欢迎&#xff0c;包括针对Web开发人员的Java面试 。 XML是一项成熟的技术&#xff0c;通常用作从一个平台传输数据的标准。 XML面试问题包含来自各种XML技术&#xff08;例如XSLT&#xff09;的问题&#xff0c;该技术用于…

【chromium】 Chromium OS的oom机制

前一段时间&#xff0c;运行在Chromium OS上的一个相机应用经常会自己崩溃&#xff0c;进程戛然而止&#xff0c;测试过程中发现使用的内存以肉眼可见的内存增长&#xff0c;当增长到1G左右&#xff0c;应用窗口突然消失&#xff0c;虽然原因不明&#xff0c;但是能猜到个大概&…

了解java.nio.file.Path – 2

在本文的第1部分中&#xff0c;我们研究了java.nio.file.Path类中的大多数API。 在本文中&#xff0c;我们将介绍其余的API。 使用register&#xff08;&#xff09; 该API允许我们注册java.nio.file.WatchService接口的实现&#xff0c;该接口将侦听目录创建&#xff0c;修改…

欧几里德算法求最大公约数

在求两个数的最大公约数方法中&#xff0c; 辗转相除法是比较快的一种方法。 也就是著名的欧几里德方法。 View Code int Gcd(int a, int b){return b0?a:gcd(b, a%b); } View Code #include "iostream"#include "cstdio"#include "cstring"#…

__reduce__

一、__reduce__()介绍 当定义扩展类型时&#xff08;也就是使用Python的C语言API实现的类型&#xff09;&#xff0c;如果你想pickle它们&#xff0c;你必须告诉Python如何pickle它们。 __reduce__ 被定义之后&#xff0c;当对象被Pickle时就会被调用。它要么返回一个代表全局名…

camel.js_Camel 2.11 –具有URL重写功能的HTTP代理路由

camel.js在即将发布的Apache Camel 2.11版本中&#xff0c;我最近添加了对将自定义url重写实现插入基于HTTP的路由&#xff08;http&#xff0c;http4&#xff0c;jetty&#xff09;的支持。 当您使用骆驼代理/桥接HTTP路由时&#xff0c;这使人们可以控制url映射。 例如&…