zend配置
error_reporting(0); //关闭所有的错误 ini_set('display_startup_errors', 1); ini_set('display_errors', 1);
error_reporting(0);是指php关闭错误报告即不显示错误
ini_set('display_errors', 1); 该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示。1显示错误
ini_set('display_startup_errors', 1); 即使 display_errors 设置为开启, PHP 启动过程中的错误信息也不会被显示。强烈建议除了调试目的以外,将 display_startup_errors 设置为关闭
date_default_timezone_set('Asia/Shanghai'); mb_internal_encoding("UTF-8");
date_default_timezone_set('Asia/Shanghai'); 设置php脚本执行的默认时区
mb_internal_encoding("UTF-8"); mb_internal_encoding 是设置获取获取mb扩展的默认编码设置 mb扩展是php的一个处理宽字符(例如:中文,日文,韩文等)函数库,mb_internal_encoding 会影响该扩展的一些函数执行结果,例如: mb_substr()
chdir(dirname(__FILE__));
dirname(__FILE`__`)指的是返回文件所在的当前目录到系统根目录的一个目录结构,在执行chdir(dirname(__FILE__));之前获取的当前目录是/opt/sites/v3/public ,在执行之后是 /opt/sites/v3/application
set_include_path( get_include_path() . PATH_SEPARATOR . ROOT_DIR . '/application/helpers' . PATH_SEPARATOR . ROOT_DIR . '/application/models' . PATH_SEPARATOR . ROOT_DIR . '/Zend' . PATH_SEPARATOR . ROOT_DIR . '/application/controllers');
在执行这段代码之前打印get_include_path()显示
.:/usr/share/pear:/usr/share/php
在执行完这段代码后打印get_include_path()显示
.:/usr/share/pear:/usr/share/php:/opt/sites/v3/application/helpers:/opt/sites/v3/application/models:/opt/sites/v3/Zend:/opt/sites/v3/application/controllers
表明他的作用应该是动态的设置包含路径
require_once "Zend/Loader/Autoloader.php"; //Zend_Loader::registerAutoload(); Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
通常,只需将需要引入包含类,然后实例化它即可。由于Zend_Loader_Autoloader采用的单例模式,可以使用getInstance()方法来获取一个实例。让autoloader 能够加载任意namespace下的类。例如,PEAR库没有使用统一的namespace,当使用多个PEAR组件时要给每一个组件指定单独的 namespace是很困难的。这种情况下可以使用setFallbackAutoloader()方法强制使autoloader可以匹配所有 namespace:`$autoloader->setFallbackAutoloader(true);`当实例化一个类A时,会自动调用'autoload'方法,该方法首先读取针对类A的命名空间注册的加载器,即通过pushAutoloader()和unshiftAutoloader()注册的加载器。然后读取ZF的内部加载器和非命名空间的加载器,若目标类A无名称空间且该autoload被设置为了后备加载器那么将会使用内部加载器进行加载。
/// 加载配置文件 require_once ROOT_DIR.'/application/config/config.php'; require_once 'Zend/Config.php'; $config = new Zend_Config($globalConfig); Zend_Registry::set('config', $config);
require_once ROOT_DIR.'/application/config/config.php';引入配置文件中的config.php,require_once 'Zend/Config.php';是引入Zend Framework中Zend_Config组件,Zend_Config被设计在应用程序中简化访问和使用配置数据。它为在应用程序代码中访问这样的配置数据提供了一个基于用户接口的嵌入式对象属性。配置数据可能来自于各种支持等级结构数据存储的媒体。当前Zend_Config为存储在Zend_Config_Ini 和Zend_Config_Xml的文本文件中的配置数据提供了适配器。通常用户可以使用象Zend_Config_Ini 或 Zend_Config_Xml适配器类的其中之一,但如果配置数据在PHP数组里可用,为了使用一个简单的面向对象的接口,可以简单地传递数据到Zend_Config构造器。
对象注册表(或称对象仓库)是一个用于在整个应用空间(application space)内存储对象和值的容器。通过把对象存储在其中,我们可以在整个项目的任何地方使用同一个对象。这种机制相当于一种全局存储。我们可以通过Zend_Registry类的静态方法来使用对象注册表,另外,由于该类是一个数组对象,你可以使用数组形式来访问其中的类方法。要保存一项内容到注册表中,我们可以使用静态方法 set()。`Zend_Registry::set('index', $value);`$value可以是一个对象、数组或者标量。你可以再次使用set()来为注册表中已有的值设置一个新值。index参数可以是一个标量,即字符串或整数,就像使用数组一样,类似于数组的索引/键名。获取Registry中的值可以使用 get()方法来获取Registry中某项内容的值。`$value = Zend_Registry::get('index');`getInstance()返回静态registry对象。 registry对象是可迭代的(iterable)。
require_once 'apiRequest.php'; $apiRequest = new Helpers_ApiRequest(); Zend_Controller_Action_HelperBroker::addHelper($apiRequest);
[Zend_Controller_Action_HelperBroker](http://blog.youkuaiyun.com/mengxiangbaidu/article/details/7345100) ,中文名称译作"助手经纪人",顾名思义,是动作助手的中间人。通过助手模式,可以把一些经常使用的功能模块做封装,从而在可以在需要的地方灵活使用,主要是在action使用。助手经纪人的常见用法: 一、注册一个助手1.Zend_Controller_Action_HelperBroker::addHelper($helper);
$frontController = Zend_Controller_Front::getInstance(); $frontController->setBaseUrl('/v3'); $frontController->setParam('useDefaultControllerAlways', true);
[Zend_Controller_Front](http://www.cnblogs.com/liuzhang/p/3163967.html "Zend_Controller_Front") 前端控制器建议集中处理所有请求的处理,前端控制器通过让单个控制器负责传输所有请求,从而解决了在 Page Controller 中存在的分散化问题。控制器本身通常分为以下两部分实现:处理程序和命令层次结构.一个前端控制器其本体包括两部分:一个分发中心(或叫调度处理程序)和一个command(或动作)层次结构。当一个请求到达服务器,前端控制器接收此请求,从其请求信息中获取足够的内容并决定下一步操作,然后委托给某个command,执行操作。
看了Zend_Controller_Front 源码 实现了» 模型-视图-控制器 (MVC)应用程序的» 前端控制器模式。目的在于初始化请求环境,并路由到来的请求,接着分发任何发现的动作;收集所有的响应,在整个过程完成时就其返回。 同是也实现了 单件(Singleton)模式,意味着任何时候,都只可能有一个有效实例。这使得它可以作为注册表,供分发过程中的其他对象引用。
$frontController->setBaseUrl('/v3');如果将 index.php 放在web服务器的名为/projects/myapp/index.php子目录中,基地址应该被设置为/projects/myapp。计算任何路由匹配之前将先从路径中去除这个字符串。这个字串需要被加入到任何路由前面。
$frontController->setParam('useDefaultControllerAlways', true);useDefaultControllerAlways用来提示 分发器遇到无法分发的请求时使用默认模块的默认控制器。
// 配置路由 $rewriteConfig = new Zend_Config_Ini($config->rewrite, 'rewrite'); $router = new Zend_Controller_Router_Rewrite(); $router->addConfig($rewriteConfig, 'routes'); $frontController->setRouter($router);
$rewriteConfig = new Zend_Config_Ini($config->rewrite, 'rewrite');从INI文件取开发配置数据。这非常简单,只要指定INI文件和开发系统节就可以加载这些数据,其中'rewrite'指的是rewrite_router.ini中的【rewrite】节
$router = new Zend_Controller_Router_Rewrite();Zend_Controller_Router_Rewrite是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数来决定哪个模块、哪个控制器和控制器中的哪个动作应该接受请求。
$router->addConfig($rewriteConfig, 'routes');告诉路由器去使用INI文件'routes'一节给它的路由。
$frontController->setRouter($router);使用Zend的Router模块使用配置文件,router使用setRouter放入front里面
// 配置控制器路径 $frontController->setControllerDirectory(ROOT_DIR.'/application/controllers');
// 配置错误控制器 。有错误产生时会转到ErrorController的errorAction方法中处理 $frontController->registerPlugin(new Zend_Controller_Plugin_ErrorHandler()); defined('APPLICATION_PATH') || define('APPLICATION_PATH', ROOT_DIR.'/application');
上面一行是定义APPLICATION_PATH,如果不存在这个常量就对其重新定义
$config = new Zend_Config_Ini(APPLICATION_PATH . '/config/application.ini','production');
读取application.ini文件中的production节点中的数据
$register = Zend_Registry::getInstance(); $register->set('config', $config);
$config是读取application.ini中production节点中的数据经过`$register->set('config', $config); `可在全局中访问
$db = Zend_Db::factory($config->resources->db); Zend_Db_Table::setDefaultAdapter($db);
Zend_Db_Table 是Zend Framework的表模块.它通过zend_db_adapter连接到 数据库,为数据库模式检查表对象,并对该表进行操作和查询.
首先需要为抽象类zend_db_table(ares注:该类为抽象类,所以不能直接实例 化,只能先继承该类,然后实例化子类)设定一个默认对数据库adapter;除非你指定其他类型数据库adapter,否则,所有的zend_db_table类实例都会使用 默认adapter.
try { $frontController->dispatch(); debug_xhprof_end(); } catch (Exception $e) { $errstr = '致命错误:'. $e->getMessage() . "\n" . ($e->getTraceAsString()); }
$frontController->dispatch();//程序执行分发