FleaPHP 开发基础 - 第二部分
时间:2009-04-20
来源:互联网
五、应用程序设置
FleaPHP 是一个具有高度灵活性的框架。开发者可以用不同的设置来调整 FleaPHP 的工作方式。这些设置统一保存在名为“应用程序设置”的数据源中。
实际上,除了 FleaPHP 框架本身,应用程序也可以使用“应用程序设置”来保存应用程序运行时需要的各种设置。
FleaPHP 的应用程序设置有一个默认配置文件,保存在 FLEA/Config/Default_APP_INF.php 中。应用程序可以在入口文件(例如 index.php)中修改这些设置,以便调整 FleaPHP 的工作方式。
如何使用应用程序设置?当 FleaPHP 框架初始化时,默认的应用程序设置文件(Default_APP_INF.php)会被载入。如果应用程序要指定设置,推荐的做法有下列几种:
创建应用程序的私有设置文件当需要指定多个应用程序设置时,推荐使用该方法。具体的做法非常简单,只需要定义类似如下的文件即可(假设下面的内容保存到文件 APP/Config/MY_APP_INF.php)。
然后在应用程序的入口文件 index.php 中调用 FLEA::runMVC() 函数的代码前,增加一行 FLEA::loadAppInf('APP/Config/MY_APP_INF.php') 即可。例如:
直接在入口文件中指定设置对于少量的设置,可以在入口文件中直接用 FLEA::setAppInf() 函数指定。例如:
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 不管采用哪一种方式,重要的都是必须在 FLEA::runMVC() 之前就指定好应用程序设置。
默认的应用程序设置默认的应用程序设置提供了符合常见应用程序运行需要的设置。下面分类列出这些设置的名字和详细说明。
核心配置
数据库相关
视图和模版相关
I18N有关 FleaPHP 对 I18N 支持的详细信息,请参考开发指南的相关章节。
FLEA_Dispatcher_Auth 和 RBAC 组件
日志服务和错误处理
六、访问数据库
这一章我们就来看看 FleaPHP 的数据库访问功能。体验一下 FleaPHP 出色的自动化 CRUD 能力。
连接数据库在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下:
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 请注意这里我们没有调用 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 'root'@'localhost'
创建记录接下来,我们用 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 的内容为以下内容:
在浏览器重新运行 test1.php,会看到输出结果 1。如果多刷新几次,可以看到这个数字不断增长。现在转到 phpMyAdmin,浏览 posts 表,会发现这个表已经插入了数据。
=700) window.open('http://old.fleaphp.org/media/manual/06-browse_table_posts.png');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
注意上图中划红圈的 created 字段。虽然我们上面的代码在用 $modelPosts->create() 插入记录时并没有提供该字段的值,但该字段的值被自动填充了。
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 当数据表中具有名为 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 应用程序中称为表数据入口。
每一个表数据入口都需要定义一个必须的成员变量:
完成上面的定义后,一个表数据入口类就准备好了。只要实例化这个类,就能对该类对应的数据表进行各种操作了。
读取和更新记录现在我们继续修改前面的代码,增加如下内容:
/** * .... 接续上面的代码片段 */echo "\n";// 读取刚刚创建的新记录$post = $modelPosts->find($newPostId);// 输出记录内容dump($post);// 修改记录内容$post['title'] = 'New title';// 保存修改后的记录到数据库$modelPosts->update($post);// 重新查询被修改后的记录$updatedPost = $modelPosts->find($newPostId);// 输出修改后的记录内容dump($updatedPost);现在通过浏览器执行 test1.php,就可以看到两个稍有不同的输出。
第一段输出是用 $modelPosts->find() 取出的记录内容。而第二段数据是用 $modelPosts->update() 更新后再取出的记录内容。
=700) window.open('http://old.fleaphp.org/media/manual/06-find_and_update.png');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
对比两段输出,可以看到第二段输出的 title 字段和 updated 字段都被修改了。
删除记录删除记录有两种主要的方式,一是用表数据入口的 remove() 方法,以一条记录做参数。另一种方法是用 removeByPkv() 方法,以记录的主键值做参数。
// 取出所有 title 字段值为 'First post' 的记录$posts = $modelPosts->findAll(array('title' => 'First post'));// 删除这些记录foreach ($posts as $post) { $modelPosts->remove($post); // 或者使用 // $modelPosts->removeByPkv($post[$modelPosts->primaryKey]);}这个章节里面,我们粗略的看了一下 FleaPHP 提供的表数据入口提供的基本操作。在后续章节里面,我们会看到表数据入口的其他强大功能。
FleaPHP 是一个具有高度灵活性的框架。开发者可以用不同的设置来调整 FleaPHP 的工作方式。这些设置统一保存在名为“应用程序设置”的数据源中。
实际上,除了 FleaPHP 框架本身,应用程序也可以使用“应用程序设置”来保存应用程序运行时需要的各种设置。
FleaPHP 的应用程序设置有一个默认配置文件,保存在 FLEA/Config/Default_APP_INF.php 中。应用程序可以在入口文件(例如 index.php)中修改这些设置,以便调整 FleaPHP 的工作方式。
如何使用应用程序设置?当 FleaPHP 框架初始化时,默认的应用程序设置文件(Default_APP_INF.php)会被载入。如果应用程序要指定设置,推荐的做法有下列几种:
创建应用程序的私有设置文件当需要指定多个应用程序设置时,推荐使用该方法。具体的做法非常简单,只需要定义类似如下的文件即可(假设下面的内容保存到文件 APP/Config/MY_APP_INF.php)。
然后在应用程序的入口文件 index.php 中调用 FLEA::runMVC() 函数的代码前,增加一行 FLEA::loadAppInf('APP/Config/MY_APP_INF.php') 即可。例如:
直接在入口文件中指定设置对于少量的设置,可以在入口文件中直接用 FLEA::setAppInf() 函数指定。例如:
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 不管采用哪一种方式,重要的都是必须在 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/ 目录中的过滤器代码实现自己的过滤器。
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > FleaPHP 初始化时,会根据 PHP 运行环境设置和应用程序设置来决定是否自动运行 FLEA_Filter_MagicQuotes 和 FLEA_Filter_Uri 过滤器。因此开发者不应该在 requestFilters 设置中调用这两个过滤器。
数据库相关
-
[*]dbDSN 数据库连接设置,必须是数组,默认值为 null dbDSN 是 FleaPHP 应用程序默认的数据库连接设置。正确指定该设置后,FleaPHP 会在应用程序需要访问数据库时尝试自动连接数据库。
dbDSN 数组中每个选项的含义如下:
-
[*]driver 数据库驱动类型,例如 mysql、pgsql 等;[*]host 数据库所在服务器,通常为 localhost 或 127.0.0.1[*]port 连接数据库的端口,通常无需指定[*]login 连接时使用的用户名[*]password 连接时使用的密码[*]database 连接后要使用的数据库名[*]charset 字符集设置,如果没有设置该选项,则以应用程序设置 databaseCharset 为准[*]options 附加的连接选项
-
[*]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
六、访问数据库
这一章我们就来看看 FleaPHP 的数据库访问功能。体验一下 FleaPHP 出色的自动化 CRUD 能力。
连接数据库在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下:
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 请注意这里我们没有调用 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 'root'@'localhost'
创建记录接下来,我们用 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 的内容为以下内容:
在浏览器重新运行 test1.php,会看到输出结果 1。如果多刷新几次,可以看到这个数字不断增长。现在转到 phpMyAdmin,浏览 posts 表,会发现这个表已经插入了数据。
=700) window.open('http://old.fleaphp.org/media/manual/06-browse_table_posts.png');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
注意上图中划红圈的 created 字段。虽然我们上面的代码在用 $modelPosts->create() 插入记录时并没有提供该字段的值,但该字段的值被自动填充了。
=700) window.open('http://old.fleaphp.org/misc/notice.gif');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" > 当数据表中具有名为 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 指定该表数据入口对应的数据表
完成上面的定义后,一个表数据入口类就准备好了。只要实例化这个类,就能对该类对应的数据表进行各种操作了。
读取和更新记录现在我们继续修改前面的代码,增加如下内容:
/** * .... 接续上面的代码片段 */echo "\n";// 读取刚刚创建的新记录$post = $modelPosts->find($newPostId);// 输出记录内容dump($post);// 修改记录内容$post['title'] = 'New title';// 保存修改后的记录到数据库$modelPosts->update($post);// 重新查询被修改后的记录$updatedPost = $modelPosts->find($newPostId);// 输出修改后的记录内容dump($updatedPost);现在通过浏览器执行 test1.php,就可以看到两个稍有不同的输出。
第一段输出是用 $modelPosts->find() 取出的记录内容。而第二段数据是用 $modelPosts->update() 更新后再取出的记录内容。
=700) window.open('http://old.fleaphp.org/media/manual/06-find_and_update.png');" onload="if(this.offsetWidth>'700')this.width='700';if(this.offsetHeight>'700')this.height='700';" >
对比两段输出,可以看到第二段输出的 title 字段和 updated 字段都被修改了。
删除记录删除记录有两种主要的方式,一是用表数据入口的 remove() 方法,以一条记录做参数。另一种方法是用 removeByPkv() 方法,以记录的主键值做参数。
// 取出所有 title 字段值为 'First post' 的记录$posts = $modelPosts->findAll(array('title' => 'First post'));// 删除这些记录foreach ($posts as $post) { $modelPosts->remove($post); // 或者使用 // $modelPosts->removeByPkv($post[$modelPosts->primaryKey]);}这个章节里面,我们粗略的看了一下 FleaPHP 提供的表数据入口提供的基本操作。在后续章节里面,我们会看到表数据入口的其他强大功能。
作者: jake 发布时间: 2009-04-20


作者: 太阳神 发布时间: 2009-04-20
谢谢楼主分享 我抱走了
作者: 0度遐想 发布时间: 2009-04-30
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28