当前位置: 首页 > news >正文

Zend_Application

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Zend_Application可谓是Zend MVC框架中几大重要模块之一,入口文件index.php一开始读取的时候就需要加载Zend_Application。
让我们从一个Zend框架项目开始会做些什么操作来分析,

首先 就是会读取index.php文件里面的内容这个毫无疑问,在index.php文件里面有
require_once 'Zend/Application.php';

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/config/application.ini'
);

$application->bootstrap()
            ->run();
这里就是开始加载一些application的配置参数,让我们都看看其做了些什么
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/config/application.ini'
);
查看Zend/Application.php 可知道这是开始构造一个类,这个构造函数有两个参数,
    &&  APPLICATION_ENV :  一个Application的环境,这个就是读取.ini文件下[production],[development : production]等这几个开发环境中我们选择的一个,一般默认我们选择的是[production]
    &&   APPLICATION_PATH.'/config/application.ini'  : 就是我们外部引入的一个配置文件,这里配置文件的格式还可以是一个数组,一个Zend_Config实例而且还可以是xml,json等格式的文件,但是我们都习惯性使用.ini格式,。
Zend/Application.php该构造函数除了定义环境之外,还初始化了Zend_Load_Autoloader单列,将在ini里面的一些参数进行自动加载配置。
到这里已经创建了Zend_Application实例并配置了一些参数,接下来 $application->bootstrap()就是对其进行引导,查看Zend_Application中bootstrap()方法可得知,Zend将引导方法给了 Zend_Application_Bootstrap_BootstrapAbstract,但是Zend_Application和 Zend_Application_Bootstrap_BootstrapAbstract是聚合关系,两者各有联系并相互通讯。调用bootstrap()方法的时候会实例化 Zend_Application_Bootstrap_BootstrapAbstract的一个子类对象( Zend_Application_Bootstrap_Bootstrap ), Zend_Application_Resource这里包含了一系列的引导资源, 引导资源类实现了 Zend_Application_Resource_Resource接口,继承自 Zend_Application_Resource_ResourceAbstract,这些资源都可以在ini文件里面设置,  Zend_Application把bootstrap()方法转发给 Zend_Application_Bootstrap_Bootstrap ,在Zend_Application_Bootstrap_Bootstrap的bootstrap()中,遍历注册了的引导资源的并调用引导的 init()方法。


配置文件(一般是configs/application.ini)可以使用并配置的资源基本有一下几项

Zend_Application_Resources:
   *  Zend_Application_Resources_Db
   *  Zend_Application_Resources_Frontcontroller
   *  Zend_Application_Resources_Layout
   *  Zend_Application_Resources_Locale
   *  Zend_Application_Resources_Log
   *  Zend_Application_Resources_Mail
   *  Zend_Application_Resources_Modules
   *  Zend_Application_Resources_Navigation
   *  Zend_Application_Resources_Router
   *  Zend_Application_Resources_Session
   *  Zend_Application_Resources_View

Zend_Application_Resources_Frontcontroller

手册里一些配置参数
     &&  controllerDirectory  :  配置controller的路径,一般在单模块的时候使用
  && moduleDirectory   :  多模块的时候配置模块的入口路径
    &&  moduleControllerDirectoryName   :   多模块的时候配置每个模块控制器的目录
    &&  defaultControllerName   :  多模块时候默认控制器的名字,一般是 index
    &&  defaultAction   :  多模块默认Action的名字,一般也是index
   &&  defaultModule  :  多模块下默认模块的路径 ,一般是default
   &&  baseUrl   :    设置基本url一般是自动检测
   &&   plugins   :  插件的配置
   &&   params   :  一些额外的参数

   一般单模块的话控制器会这样的配置
            resources.frontController.controllerDirectory= APPLICATION_PATH  "/controllers"   

      这也相当于在index.php或者在Bootstrap.php文件的   

  
  如果是多模块的话
          resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"   //将模块指向 application/modules 目录下,必填
             resources.frontController.moduleControllerDirectoryName = "controllers"   // 指示模块下controller的路径,必填
             resources.frontController. params.prefixDefaultModule = 1 // 当我们使用了模块后,我们在非默认模块的的动作控制器中需要遵循一个防止命名控制冲突的不同的命名协议。因此,在我们的例子中,所有在product模块中的动作控制器Action Controllers都需要增加一个Product的命名空间,例如,Product模块中的detail的动作控制器应当命名成Product_DetailsController,但对于默认模块(default(global) modules)中的动作控制器则不需要,例如,default模块中的detail的动作控制器应该命名成DetailsController,然而,我们通过设置 prefixDefaultModule 变量能够改变这种默认的行为, 通过这样,我们的default模块中的所有动作控制器(如detail动作控制器)都应该加上模块前缀,即Default_(Default_DetailsController,可填
           resources.frontController.params.useDefaultControllerAlways = 1   //估计如果没设置的话应该也是一直使用默认控制器,此处不是很明白,可填
          resources.frontController.params.displayExceptions = 0  // 显示运行时的错误,可填

转载于:https://my.oschina.net/u/874588/blog/106858

相关文章:

  • 读《大学之路》有感②
  • FlickTabControl
  • 最经典的黑客技术入门知识
  • Redmine Feedback
  • 第九章 Redis过期策略
  • Harfbuzz-ng API Basic Usage
  • Swift项目部署到OSChina
  • python:使用paramiko批量管理服务器(含密钥和密码)
  • kvm virsh console 配置
  • win7下在当前目录下打开cmd命令窗口
  • Servlet 3.0新特性详解
  • bind 事件名称 命名空间
  • 谈谈对程序员的培养!
  • 动态rem解决移动前端适配
  • Python3.x和Python2.x的区别
  • [Vue CLI 3] 配置解析之 css.extract
  • [笔记] php常见简单功能及函数
  • CEF与代理
  • CentOS 7 修改主机名
  • express如何解决request entity too large问题
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java比较器对数组,集合排序
  • laravel with 查询列表限制条数
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Magento 1.x 中文订单打印乱码
  • Mocha测试初探
  • Mysql5.6主从复制
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • node和express搭建代理服务器(源码)
  • Sass Day-01
  • Selenium实战教程系列(二)---元素定位
  • spring学习第二天
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 由插件封装引出的一丢丢思考
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​secrets --- 生成管理密码的安全随机数​
  • (4) PIVOT 和 UPIVOT 的使用
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • ./configure、make、make install 命令
  • .net Application的目录
  • .Net 应用中使用dot trace进行性能诊断
  • .Net环境下的缓存技术介绍
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • ??在JSP中,java和JavaScript如何交互?
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @ModelAttribute注解使用
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • @软考考生,这份软考高分攻略你须知道
  • @在php中起什么作用?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [acwing周赛复盘] 第 94 场周赛20230311