




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FleaPHP 开发指南整理By:ZERO1. 开始前的准备工作为了避免各种不同开发环境配置对学习 FleaPHP 造成的干扰,因此建议你按照本文配置一个专门用于学习 FleaPHP 的开发环境。步骤: 首先 下载 APM Express 5和 FleaPHP 完全版,并解压缩到硬盘。 最后,启动 APMXE5,并从任务栏系统托盘区的 APM Express 图标上选择“Start”菜单,运行 Apache 和 MySQL。 有关 APM Express 的详细信息,请参考APM Express 1.5火爆公测。注意:在开发指南中,如果没有特别说明,htdocs 均指存放 PHP 脚本文件的目录。当你使用 APMXE5,并且将其解压缩到 D:APMXE5 目录时,则 htdocs 目录等同于 D:APMXE5htdocs 目录。2. FleaPHP 中的 MVC 模式理解 FleaPHP 中,MVC 模式是如何实现的,以及其特点,可以帮助你更好的运用 FleaPHP。什么叫做设计模式? Design pattern简单来说,设计模式(Pattern)就是解决某一类问题的特定方法。由于这种特定方法在解决同类问题时具有通用性,所以我们就可以一次又一次的利用已有的经验。具体到程序编写上,就是我们可以用类似的程序结构和代码解决同类型的问题。有关设计模式的详细内容,可以阅读经典著作设计模式,这里我就不班门弄斧了。MVC 实际上是一系列略有不同的模式。FleaPHP 采用的是Passive(被动)MVC 模式。在 Passive MVC 模式中,Model(模型)完全不知道自己身处于 MVC 结构之中。换句话说,Model 就是一个普通的对象,与 MVC 模式里面的其他组成部分完全没有关联。具体而言,MVC 模式涉及到下列三类对象: M 代表 Model,即模型,用于封装与业务逻辑有关的代码和数据。例如对订单的各种计算。 V代表 View,即视图,用于呈现内容给用户(也就是将程序运行的结果返回给浏览器显示)。例如商品列表页面、后台登录页面。 C 代表 Controller,即控制器,用于接收用户输入(通过浏览器发起的请求),然后调用模型(Model)对输入数据进行处理并获得处理结果。最后将结果传递到视图(View),从而让用户能够看到自己操作的结果。例如用户点击删除文章按钮后,控制器调用操作文章的模型,删除掉指定文章,最后通过视图显示成功删除文章的提示信息。 经过这样简单的分离,我们就把应用程序操作数据的代码(绝大部分 Web 应用程序都是对数据进行操作)和处理用户输入输出的代码分离开来了。这种分离有许多好处: 清晰的将应用程序分隔为独立的部分; 业务逻辑代码能够很方便的在多处重复使用; 方便开发人员分工协作; 如果需要,可以方便开发人员对应用程序各个部分的代码进行测试。 如果你上面的文字让你觉得很无聊或者不够严谨,那么说明你已经很熟悉 MVC 模式了。如果你看到上面的文字感到无所适从,那说明你还需要多阅读一些面向对象相关的书籍和文档。应用程序执行流程下面的插图描述了基于 FleaPHP 应用程序的执行流程。1. index.php 是应用程序的入口文件,负责定义一些应用程序必须的常量,并载入 FleaPHP 框架,然后执行 run() 函数; 2. 过滤器链完成 HTTP 请求数据解析、MagicQuotes 处理等工作; 3. 应用程序控制根据 HTTP 请求,调用领域逻辑、表数据入口、组件等,并将处理结果传送到视图/模板; 4. 视图/模板根据应用程序控制器提供的数据生成输出内容并传送到浏览器。 在 FleaPHP 中,index.php 里面的 run() 在调用过滤器链后,会运行一个调度器。该调度器根据 HTTP 请求参数决定要调用的应用程序控制器。例如 index.php?controller=blog&action=list 这个请求表示要调用名为 blog 的应用程序控制器的 list 动作。然后调度器会调用这个控制器的动作。在 FleaPHP 应用程序中,控制器实现为一个类,控制器动作就是该类的一个方法。在控制器(MVC 模式中的 Controller)方法中,通过调用领域逻辑代码(MVC 模式中的 Model)来处理 HTTP 请求提交的数据并获得结果。然后再将结果传递给视图(MVC 模式中的 View)。视图根据控制器方法提供的参数从模板文件构造最终的页面内容,并返回给浏览器。3. 应用程序入口与许多开发框架一样,FleaPHP 通常也使用一个入口文件来启动框架,并运行应用程序代码。虽然 FleaPHP 并不要求应用程序必须使用单一的入口文件,不过在本系列文章中,我大部分时间都使用单一入口文件。单一入口应用程序在 FleaPHP 应用程序使用 MVC 模式时,应用程序的所有功能都通过一个单一的文件来调用。这种通过单一文件来执行所有功能的应用程序,称为单一入口应用程序。有关单一入口应用程序的一些信息,可以参考 ChinaUnix 上的一篇帖子。许多著名的 PHP 应用程序都是单一入口,例如 Drupal、WordPress、XOOPS、Mambo 等。当然也有 phpMyAdmin 这样的非单一入口应用程序。创建入口文件现在,我们来创建一个最简单的入口文件。打开文本编辑器,创建 htdocsindex.php 文件,内容如下:?phprequire(FLEA/FLEA.php);FLEA:runMVC();现在启动浏览器,输入地址:http:/localhost/index.php,应该就可以看到如下的画面:这个画面显示了一个错误信息,但是也表明 index.php 中的两行代码已经成功启动了 FleaPHP 框架。实现我们的第一个控制器在 FleaPHP 应用程序中,应用程序包含多个控制器。每一个控制器又提供一组控制器动作(后文及本系列文章中都简称为“动作”)。每一个浏览器发送给 FleaPHP 应用程序的请求,都是由一个动作来处理的。将一组相关的动作集中到一起,就形成了一个控制器。现在我们来实现第一个控制器:创建 htdocsAPPController 目录,并创建文件 htdocsAPPControllerDefault.php (注意严格匹配目录名和文件名的大小写),内容如下:?phpclass Controller_Default function actionIndex() echo My first controller.; 同时修改 index.php 入口文件,内容改为:?phprequire(FLEA/FLEA.php);FLEA:import(dirname(_FILE_) . /APP);FLEA:runMVC();现在切换到浏览器,点击“刷新”按钮,可以看到 Default.php 文件中的 actionIndex 方法正确执行了。从刚刚这个例子可以看到,每一个控制器实际上就是一个类,而一个动作则是该类的一个方法。添加更多的动作现在我们为这个控制器添加更多的 Action 方法:?phpclass Controller_Default function actionIndex() echo My first controller.; function actionSay() echo Oh, FleaPHP great!; 切换到浏览器,将浏览地址从 http:/localhost/index.php 改为 http:/localhost/index.php?action=say 并按回车键。可以看到输出内容改变了。由此可见,action 参数的值决定了要调用控制器中的哪一个动作方法。在上面的例子中,action=say 时,调用的动作方法为 actionSay。因为 FleaPHP 默认要求每一个动作方法必须加上前缀 action。如果不提供 action 参数,则名为 index 的动作方法 actionIndex() 会被调用。实现更多的控制器创建新文件 htdocsAPPControllerBook.php,并输入内容:?phpclass Controller_Book function actionIndex() echo Book controller default action.; function actionSayTitle() echo h(); 现在切换到浏览器,输入地址 http:/localhost/index.php?controller=Book&action=sayTitle,并按回车键。可以看到我们成功的调用了另一个控制器的动作方法。与使用 action 参数指定要调用的动作类似,用 controller 参数可以指定要调用的控制器。而此时 action 参数指定的就是该控制器的动作。4. 命名规范和目录结构FleaPHP 的命名规则和目录结构初看上去比较复杂,但习惯以后,你会发现这种命名规则带来许多好处。因此像 Zend Framework 也是采用同样的做法。当然,FleaPHP 对于应用程序的命名规则和目录结构没有强制性要求。只不过采用一致的命名规则和目录结构,可以方便对应用程序维护。同时 FleaPHP 应用程序开发者之间也可以更容易的进行协作。全局函数的命名规则全局函数的命名规则是用“_”分隔全小写的单词。例如 get_cache()。同时,函数的名字采用“动词+宾语”的形式。例如 write(动词)_cache(宾语)。不过有些全局函数为了和 PHP 中已有的类似函数保持一致,采用了不同的命名方式(顺便抱怨一下,PHP 自身的全局函数命名比较混乱,各种形式的都有)。类的命名规则所有 FleaPHP 自带的类,都以 FLEA_ 开头。然后根据用途命名。例如 FLEA_Controller_Action、FLEA_Helper_ImgCode。然后将类名字中的“_”替换为目录分隔符,就是这个类的定义文件所在位置。举例:FLEA_Controller_Action 类,保存文件为 FLEA/Controller/Action.php FLEA_Db_TableDataGateway 类,保存文件为 FLEA/Db/TableDataGateway.php这种命名规则和目录结构的优缺点如下:优点: 避免命名冲突 根据类名字就能找到文件存放位置 应用程序中可以使用 FleaPHP 的 FLEA:import()、FLEA:loadClass() 方法方便的载入类定义文件 如果使用 PHP5,可以很方便的用 _autoload() 来自动载入需要的类定义: ?phpfunction _autoload($className) FLEA:loadClass($className, true);缺点: 类名字较长,不便于输入,例如 FLEA_Rbac_UsersManager 也许和现有习惯不同,需要时间来适应 对于第一个缺点,使用 Zend Development Environment 或者 Eclipse 这样的 IDE 可以缓解。这些 IDE 提供强大的输入自动完成功能,通常输入类名字的开头几个字母,就会显示候选列表让开发者选择。变量和常量命名在 FleaPHP 中,变量分为全局变量、临时变量和模版变量三类。 全局变量和常量 全局变量和常量都使用全大写,以“_”分隔。例如 $GLOBALSCLASS_PATH 和 FLEA_DIR。不过 FleaPHP 中尽量避免了使用全局变量和常量,因此一般来说不会和应用程序产生冲突。 临时变量 函数、类方法中使用的变量都是临时变量,命名规则是第一个单词小写,后续的单词第一个字母大写。例如 $requestFilters、$dispatcherClass 等。 模版变量 之所以要把模版变量单独列出来,是因为不同的模版引擎对变量名有不同的规范。从我个人来说,我倾向于模版变量使用全小写单词,并以“_”分隔,例如 $latest_products_list。这样在程序里面一眼就能看出哪些变量是用于模版的。FleaPHP 的目录结构一个典型的 FleaPHP 应用程序具有如下的目录结构:这个应用程序的目录主要分为 LIBS 和 WEBROOT。其中 LIBS 保存程序的所有代码,而 WEBROOT 目录下只保存用户可以访问的部分,例如 index.php 入口文件、图片、CSS 样式表和 JS 脚本。LIBS 下又分为 FLEA、SHARED、ADMIN、FRONT 等目录。FLEA 目录保存 FleaPHP 的核心文件,而 SHARED 目录保存应用程序前后台共享的文件、ADMIN 目录保存应用程序后台专有的代码、FRONT 目录保存前台程序专有的代码。开发者在规划目录结构时,可以参照这种方式。WEBROOT 是保存用户使用浏览器可以直接访问的内容,因此需要修改服务器或虚拟主机设置,将网站的根目录指向 WEBROOT 目录。例如 指向 /example/WEBROOT/。这里介绍的目录结构有如下优点:优点: 代码文件放置在浏览器访问不到的地方,提高了安全性 程序员和设计人员可以在不同的目录工作,降低了发生冲突的几率 目录结构更清晰,容易理解 而主要的缺点就是需要修改服务器设置,将网站根目录指向 WEBROOT 目录。而有些虚拟主机不允许这样做,或者需要联系服务器管理员,比较麻烦。对于这种目录结构,放置在 WEBROOT 中的 index.php 入口文件应该明确调用 FLEA:import() 将 LIBS 目录添加到类定义搜索路径中。否则 FLEA:loadClass() 会找不到需要的文件。?phprequire(./LIBS/FLEA/FLEA.php);FLEA:import(./LIBS/SHARED/);.FLEA:runMVC();对于虚拟主机用户,可以将 LIBS 目录移动到 WEBROOT 目录中。形成如下的目录结构:上图中,所有文件都保存在应用程序的根目录 cdhlss 中,而代码文件保存在 LIBS 子目录中。相应的 index.php 需要修改为:?phprequire(libs/FLEA/FLEA.php);FLEA:import(LIBS/APP/);.FLEA:runMVC();在实际开发中,由于 FleaPHP 并没有强制要求命名规范和目录结构。所以开发者可以继续沿用自己熟悉的方式来开发应用程序。5. 应用程序设置FleaPHP 是一个具有高度灵活性的框架。开发者可以用不同的设置来调整 FleaPHP 的工作方式。这些设置统一保存在名为“应用程序设置”的数据源中。实际上,除了 FleaPHP 框架本身,应用程序也可以使用“应用程序设置”来保存应用程序运行时需要的各种设置。FleaPHP 的应用程序设置有一个默认配置文件,保存在 FLEA/Config/Default_APP_INF.php 中。应用程序可以在入口文件(例如 index.php)中修改这些设置,以便调整 FleaPHP 的工作方式。如何使用应用程序设置?当 FleaPHP 框架初始化时,默认的应用程序设置文件(Default_APP_INF.php)会被载入。如果应用程序要指定设置,推荐的做法有下列几种:创建应用程序的私有设置文件当需要指定多个应用程序设置时,推荐使用该方法。具体的做法非常简单,只需要定义类似如下的文件即可(假设下面的内容保存到文件 APP/Config/MY_APP_INF.php)。 UserCenter, urlLowerChar = false, dispatcher = FLEA_Dispatcher_Auth, dbDSN = array( driver = mysql, host = localhost, login = root, password =空字符串, database = test, ),);?然后在应用程序的入口文件 index.php 中调用 FLEA:runMVC() 函数的代码前,增加一行 FLEA:loadAppInf(APP/Config/MY_APP_INF.php) 即可。例如:直接在入口文件中指定设置对于少量的设置,可以在入口文件中直接用 FLEA:setAppInf() 函数指定。例如:不管采用哪一种方式,重要的都是必须在 FLEA:runMVC() 之前就指定好应用程序设置。默认的应用程序设置默认的应用程序设置提供了符合常见应用程序运行需要的设置。下面分类列出这些设置的名字和详细说明。核心配置 namespace 应用程序的默认名字空间,默认值为空字符串 这个设置会影响到应用程序所有类的名称定义。例如 namespace 设置为 FOO 时,应用程序所有控制器、模型的类名字都要加上前缀 FOO_。变成诸如 FOO_Controller_Default、FOO_Model_News 等。该设置仅用于兼容使用早期FleaPHP开发的应用程序,不建议在新应用程序中使用。为了让你的代码能够更容易的在其他应用程序中复用,最好将 namespace 设置为空字符串。 controllerAccessor 指示控制器的 URL 参数名,默认值为 controller 这个设置指定在 URL 查询参数中,用什么名字的参数指定控制器名字。例如 controllerAccessor 设置为 “ctl” 时,就必须用 index.php?ctl=MyController 来指定要调用的控制器。 defaultController 指示默认控制器的名字,默认值为 Default 当 url 参数中没有指定要调用的控制器时,将依据 defaultController 的设置调用默认的控制器。 actionAccessor 和 defaultAction,默认值分别为 action 和 index 这两个设置的作用和 controllerAccessor、defaultController 类似。只不过用于指定控制器动作的参数名和默认动作名。 urlMode 指定 URL 分析和构造模式,默认值为 URL_STANDARD URL 的分析和构造模式,目前支持三种,分别是:URL_STANDARD、URL_PATHINFO 和 URL_REWRITE。URL_STANDARD 模式中,URL 参数采用采用标准的方式,例如 index.php?controller=MyController&action=MyAction&class_id=2&sort=1关于 URL_PATHINFO 和 URL_REWRITE 的详细说明,请参考使用 PATHINFO 和 URL 重写。 urlLowerChar 指示是否将 url 参数中包含的控制器名字和动作名字强制转为小写字符,默认值为 false 对于 Windows 系统来说,这个设置无关紧要。而对于 Linux/Unix 系统来说,这个设置会关系到控制器类定义文件的命名。当 urlLowerChar 为 true 时,控制器名字会被转为小写字符,而该控制器的类名字除第一个字母为大写外,其他全为小写。例如控制器名为 MyController,实际的控制器类名称为 Mycontroller,对应的类定义文件为 Mycontroller.php。当 urlLowerChar 为 false 时,控制器名字和控制器的类名字完全对应,例如控制器名为 QuickBenchmark,实际的控制器类名称为 QuickBenchmark,对应的类定义文件为 QuickBenchmark.php。 controllerClassPrefix 指示控制器类名称前缀,默认值为 Controller_ actionMethodPrefix 和 actionMethodSuffix 指示控制器动作的方法名要加上的前缀和后缀,默认值分别为 action 和空字符串 使用前缀和后缀可以,让控制器动作方法的名称和控制器中的其他方法区别开来。同时也可以避免无意中造成控制器内的私有方法被浏览器访问到。 dispatcher 指示应用程序要使用的 URL 调度器,默认值为 FLEA_Dispatcher_Simple URL 调度器分析 URL 参数,决定要调用的控制器和控制器动作方法,最后调用控制器动作方法。默认的 FLEA_Dispatcher_Simple 是一个简单的调度器,仅仅是分析 URL 参数,然后完成调用工作。而更复杂的 FLEA_Dispatcher_Auth 则可以结合 FleaPHP 自带的 RBAC(基于角色的访问控制)组件完成访问控制功能。如果开发者自己编写了调度器,那么修改这个设置即可让应用程序使用开发者自己编写的调度器。 dispatcherFailedCallback 指示调度器调度失败后,要调用的处理程序,默认值为 null 如果希望应用程序处理调度失败的情况(例如控制器或控制器方法不存在),则需要覆盖这个设置。 internalCacheDir 指示 FleaPHP 内部及 cache 系列函数使用的缓存目录,默认值为 FLEA/_Cache/ 目录 autoLoad 指示要自动载入的文件,默认载入 FLEA_Helper_Array.php、FLEA_Helper_Html.php 和 FLEA_Controller_Action.php 三个文件 这个设置必须是一个数组,数组中每一个项目为要自动载入的文件。 sessionProvider 指示要使用的 session 服务提供程序,默认值为 null 如果设置为 null,则表示使用 PHP 自带的 session 服务。 autoSessionStart 指示是否自动起用 session 支持,默认值为 true 如果该设置为 true,则每次 FleaPHP 框架初始化后都会自动执行 session_start() 函数。 requestFilters 指示使用哪些过滤器对 HTTP 请求进行过滤,默认值为空数组 和 autoLoad 设置类似,该设置必须为数组。但数组中每一个项目为要运行的过滤器类名字。过滤器按照出现在数组中的顺序初始化和运行。每一个过滤器实际上都是一个脚本,无需要实现为一个类。可以参考 FLEA/Filter/ 目录中的过滤器代码实现自己的过滤器。FleaPHP 初始化时,会根据 PHP 运行环境设置和应用程序设置来决定是否自动运行 FLEA_Filter_MagicQuotes 和 FLEA_Filter_Uri 过滤器。因此开发者不应该在 requestFilters 设置中调用这两个过滤器。数据库相关 dbDSN 数据库连接设置,必须是数组,默认值为 null dbDSN 是 FleaPHP 应用程序默认的数据库连接设置。正确指定该设置后,FleaPHP 会在应用程序需要访问数据库时尝试自动连接数据库。dbDSN 数组中每个选项的含义如下:o driver 数据库驱动类型,例如 mysql、pgsql 等; o host 数据库所在服务器,通常为 localhost 或 o port 连接数据库的端口,通常无需指定 o login 连接时使用的用户名 o password 连接时使用的密码 o database 连接后要使用的数据库名 o charset 字符集设置,如果没有设置该选项,则以应用程序设置 databaseCharset 为准 o options 附加的连接选项 典型的 dbDSN 设置如下: mysql, host = localhost, login = username, password = password, database = test_db, );? dbTDGAutoInit 指示构造表数据入口对象时,是否自动连接到数据库,默认值为 true 如果你希望自己控制数据库连接,那么可以将该设置指定为 false。 dbTablePrefix 指示数据表的全局前缀,默认为空字符串,该设置会影响到所有数据表 dbValidationProvider 指示表数据入口要使用的数据验证服务对象,默认值为 FLEA_Helper_Validation 视图和模版相关 view 指示要使用的模板引擎,PHP 表示使用 PHP 语言本身作模板引擎,默认值为 PHP 目前 FleaPHP 提供了 FLEA_View_Simple 模版引擎和 FLEA_View_Smarty 模版引擎。其中 FLEA_View_Smarty 实际上是一个连接器,用于连接 Smarty 模版引擎。 viewConfig 指定模板引擎要使用的配置信息,默认为 null 不同模版引擎可能需要不同的配置,可以用 viewConfig 设置来指定。I18N有关 FleaPHP 对 I18N 支持的详细信息,请参考开发指南的相关章节。 responseCharset 指示 FleaPHP 输出内容的使用的编码,默认值为 gb2312 FleaPHP 核心本身并不假定要处理的内容采用什么编码,也不会自动将输入内容转换为输出内容指定的编码。responseCharset 设置仅仅是用来作为一个参考,特别是 autoResponseHeader 设置为 true 时,FleaPHP 会自动送出 Content-Type: text/html; charset=xxxxx 的 HTTP 头信息。 databaseCharset 指示当 FleaPHP 连接数据库时,要指定的编码,默认值为 gb2312 许多较为高级的数据库,例如 PostgreSQL、MySQL 4.1/5.x、Oracle 等,都允许在数据库中保存不同编码的数据。因此开发者要正确设置 databaseCharset 设置,以便 FleaPHP 在连接数据库时能够正确设置编码,避免乱码问题。对于较老的数据库,例如 MySQL 3.x/4.0,这个设置没有意义。 autoResponseHeader 指示是否自动输出 Content-Type: text/html; charset=xxxxx 的 HTTP 头信息,默认值为 true 当该设置为 true 时,FleaPHP 会在初始化时自动输出一个 HTTP 头信息,以指定应用程序输出内容的编码。具体指定什么编码,由 responseCharset 设置决定。对于大部分服务器,启用该设置可以避免出现浏览器无法正确识别输出内容编码的问题。但在某些服务器环境中,启用该设置会导致出现无法输出动态图像等问题。 charsetConstant 指示是否自动定义 RESPONSE_CHARSET、DATABASE_CHARSET 等常量,默认值为 true 当该设置为 true 时,FleaPHP 会在初始化时根据 responseCharset 和 databaseCharset 设置分别定义 RESPONSE_CHARSET 和 DATABASE_CHARSET 常量。应用程序可以用这两个常量简化一些开发。 multiLangaugeSupport 指示是否启用多语言支持,默认值为 false 当该设置为 true 时,会自动载入由 languageSupportProvider 指定的多语言支持服务提供程序。 languageSupportProvider 指定提供多语言支持的提供程序,默认值为 FLEA_Language FLEA_Language 是 FleaPHP 自带的多语言支持服务提供程序。 languageFilesDir 指示语言文件的保存位置,默认值为 null 当使用多语言支持时,必须修改该设置,指向一个保存所有语言文件的目录。语言文件按照“语言/字典名.php”的目录结构存储,例如 languageFilesDir 设置为 /var/www/test/languages,则语言文件的实际文件名就可能是:/var/www/test/languages/chinese-gb2312/user_interface.php。 defaultLanguage 指示默认语言,默认值为 chinese-gb2312 当载入语言文件时如果没有指定语言参数,则会从 defaultLanguage 指定的语言目录下载入字典文件。 autoLoadLanguage 指示要自动载入的语言字典,默认值为 null autoLoadLanguage 可以是数组,其中每一项是一个要载入的字典名。或者是一个用“,”分隔多个字典名的字符串。FLEA_Dispatcher_Auth 和 RBAC 组件 dispatcherAuthProvider 指示调度器要使用的验证服务提供程序,默认值为 FLEA_RBAC FLEA_RBAC 提供了 check() 方法,让调度器通过调用该方法来检查当前发起请求的用户是否有权限访问指定的控制器和控制器动作方法。如果开发者要编写自己的验证服务提供程序,就必须实现 check() 方法。如果使用开发者自己编写的调度器,也可以通过该设置来指定验证服务提供程序。check() 方法的原型是:function check($roles, $ACT) defaultControllerACTFile 指示 RBAC 组件要使用的默认 ACT 文件,默认值为空字符串 通过该设置,可以为多个控制器指定 ACT(访问控制表),而不需要为每一个控制器都提供一个 .act.php 文件。注意,该设置指定的文件必须是完整路径,或者相对于应用程序入口(index.php)的相对路径。 autoQueryDefaultACTFile 指示 RBAC 组件是否在没有找到控制器的 ACT 文件时,是否从默认 ACT 文件中查询控制器的 ACT,默认值为 false controllerACTLoadWarning 指示没有找到控制器的 ACT 时,是否显示警告信息,默认值为 true defaultControllerACT 指示当没有为控制器提供 ACT 时,要使用的默认 ACT,默认值为 null dispatcherAuthFailedCallback 指示用户没有权限访问控制器或控制器方法时,要调用的处理程序,默认值为 null RBACSessionKey 指示 RBAC 组件用什么键名在 session 中保存用户数据,默认值为 RBAC_USERDATA 如果在一个域名下同时运行多个应用程序,请务必为每一个应用程序使用自己独一无二的键名。日志服务和错误处理 logEnabled 指示是否启用日志服务,默认值为 false 如果该设置为 true,则会自动载入由 logProvider 设置指定的日志服务提供程序。 logProvider 指示日志服务的程序,默认值为 FLEA_Log logFileDir 指示用什么目录保存日志文件,默认值为 null 最好将日志保存在浏览器无法访问的目录中。 logFilename 指示用什么文件名保存日志,默认值为 access.log logFileMaxSize 指示当日志文件超过多少 KB 时,自动创建新的日志文件,单位是 KB,不能小于 512KB,默认值为 4096 logErrorLevel 指示哪些级别的错误要保存到日志中,默认值为 warning, error, exception displayErrors 指示是否显示错误信息,默认值为 true friendlyErrorsMessage 指示是否显示友好的错误信息,默认值为 true 6. 访问数据库这一章我们就来看看 FleaPHP 的数据库访问功能。体验一下 FleaPHP 出色的自动化 CRUD 能力。连接数据库在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下: mysql, host = localhost, login = root, password = , database = test,);/ 获取数据库访问对象$dbo =& FLEA:getDBO($dsn);/ 连接到数据库if ($dbo-connect() echo Connect to database successed.;?请注意这里我们没有调用 run() 函数。因此我们需要调用 FLEA:init() 函数来初始化 FleaPHP 运行环境。并且 FLEA:init() 函数应该在用 register_app_inf() 或 set_app_inf() 修改应用程序设置后调用。现在启动 APM Express,通过浏览器执行 http:/localhost/testDB/test1.php,如果一切正常,应该看到 Connect to database successed 信息。如果出现如下的错误信息,说明 MySQL 数据库的 root 用户密码不正确。请修改上面代码中的 password 信息。Warning: mysql_connect() function.mysql-connect: Access denied for user rootlocalhost创建记录接下来,我们用 phpMyAdmin 在 test 数据库中执行下面的 SQL 语句。这会创建在 test 数据库中创建一个名为 posts 的表。CREATE TABLE posts ( post_id int(11) NOT NULL auto_increment, title varchar(255) NOT NULL, body text NOT NULL, created int(11) default NULL, updated int(11) default NULL, PRIMARY KEY (post_id);现在我们修改 test1.php 的内容为以下内容: mysql, host = localhost, login = root, password = , database = test,);/ 指定数据库连接设置,TableDataGateway 会自动取出 dbDSN 设置来连接数据库set_app_inf(dbDSN, $dsn);/ 初始化 FleaPHP 运行环境FLEA:init();/ 由于 FLEA_Db_TableDataGateway 并不是自动载入的,因此需要明确载入FLEA:loadClass(FLEA_Db_TableDataGateway);/ 从 FLEA_Db_TableDataGateway 派生 Posts 类class Posts extends FLEA_Db_TableDataGateway / 指定数据表名称 var $tableName = posts; / 指定主键字段名 var $primaryKey = post_id;/ 构造 Posts 实例$modelPosts =& new Posts();/ 创建一条新记录,并返回新记录的主键值$row = array( title = First post, body = First post body,);$newPostId = $modelPosts-create($row);echo $newPostId;?在浏览器重新运行 test1.php,会看到输出结果 1。如果多刷新几次,可以看到这个数字不断增长。现在转到 phpMyAdmin,浏览 posts 表,会发现这个表已经插入了数据。注意上图中划红圈的 created 字段。虽然我们上面的代码在用 $modelPosts-create() 插入记录时并没有提供该字段的值,但该字段的值被自动填充了。当数据表中具有名为 created、created_at 或 created_on 的字段,并且字段类型为整数或日期,则在向这个数据表插入记录时。FleaPHP 会自动用当前时间填充该字段。同样的,updated、updated_at 或 updated_on 字段会在更新记录时用当前时间填充。关于 FLEA_Db_TableDataGatewayFLEA_Db_TableDataGateway 是一个提供自动化 CRUD 操作的类。开发者必须从该类派生自己的类。每一个 FLEA_Db_TableDataGateway 派生类对应一个数据表。例如上面代码中的 Posts 类就对应数据表 posts。FLEA_Db_TableDataGateway 派生类在 FleaPHP 应用程序中称为表数据入口。每一个表数据入口都需要定义一个必须的成员变量: $tableName 指定该表数据入口对应的数据表 如果数据表有多个主键字段,那么还要用 $primaryKey 指定要使用的主键字段。当没有用 $primaryKey 指定时,FLEA_Db_TableDataGateway 会自动根据数据表定义来确定主键字段名。完成上面的定义后,一个表数据入口类就准备好了。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025昆明市晋宁区残疾人联合会招聘编外人员(1人)考前自测高频考点模拟试题有完整答案详解
- 2025福建泉州丰泽教育管理集团有限公司招聘从事公办学校教学工作国企派遣员工拟聘用人员(三)笔试历年参考题库附带答案详解
- 2025福建厦门市同安区第一建筑工程公司校园招聘79人笔试历年参考题库附带答案详解
- 2025浙江丽水市松阳县粮食收储有限公司定向培养粮油储检人员毕业生拟聘人员笔试历年参考题库附带答案详解
- 2025广东佛山市三水工业园区投资发展有限公司招聘企业管理人员笔试历年参考题库附带答案详解
- 2025山东沂河生态发展集团有限公司及其权属子公司招聘12人笔试历年参考题库附带答案详解
- 2025中盐东兴云梦制盐有限公司宜川县招聘笔及(陕西)笔试历年参考题库附带答案详解
- 2025广东韶关市始兴县事业单位招聘工作人员暨“青年人才”和“急需紧缺人才”招聘89人考前自测高频考点模拟试题及答案详解(典优)
- 2025北京大兴区兴丰街道招聘临时辅助用工人员4人模拟试卷及一套完整答案详解
- 2025年滁州市机械工业学校公开引进教育紧缺人才8人考前自测高频考点模拟试题附答案详解(突破训练)
- 出入境化妆品抽、采样作业指导书
- DBJ51-T 040-2021 四川省工程建设项目招标代理操作规程
- 中秋国庆双节活动主题
- 中考英语高频词汇大纲表(人教版)
- 血透患者跌倒的预防及管理
- 砼回弹强度自动计算表
- 医防融合知识讲座
- 培养幼儿的语言能力
- 《认识几种常见的岩石》说课稿、教案和教学设计
- 黑布林英语阅读初一年级16《柳林风声》译文和答案
- 广东省监理从业人员网络继续教育平台题库
评论
0/150
提交评论