这一篇教程,我们要在数据库中建立已经设计好的数据结构并修改一些必要的配置,以便 digg 程序能够连接到数据库。最后我们会在数据库中添加一些测试数据,看看 digg 程序是否能够正确读取。
开始之前,我们来熟悉一下 QeePHP 应用程序的目录结构:
看上去目录比较多,但我们现在只关注下面几个:
- app 这是放置应用程序代码的地方
- config 这里存放了应用程序的配置文件
- public 这个目录用于存放应用程序的图片、样式表、Javascrīpt 脚本文件等
其中 app 目录又分为:
app 目录中的这些子目录用途分别是:
- controller 应用程序的控制器代码
- helper 用于控制器和模板中的助手
- model 里面是实现业务逻辑的模型类文件
- ui 自定义的用户界面控件
- view 应用程序的视图(也就是我们常说的模板文件)
看到这么复杂,头晕想吐?没关系,吐啊吐啊的就习惯了 -_-#
吐完了吗?那就继续吧。
首先创建需要的数据库,然后导入已经设计好的数据结构。并在数据库中创建用户,用于连接该数据库。通常我们使用 phpMyAdmin 这个工具来进行,具体的操作可以百度一下。
打开 config/database.yaml.php 文件,按照我们的数据库设置进行修改,例如:
|
# <?php die(); ?>
############################# # 数据库设置 #############################
# devel 模式 devel: driver: mysql host: localhost login: digg password: KzWyQ8hJnCLLrGfb database: digg_db charset: utf8
# test 模式 test: driver: mysql host: localhost login: digg password: KzWyQ8hJnCLLrGfb database: digg_db charset: utf8
# deploy 模式 deploy: driver: mysql host: localhost login: digg password: KzWyQ8hJnCLLrGfb database: digg_db charset: utf8
|
这个文件分为三部分,分别对应三种模式:开发、测试和部署。不过现在我们不去考虑这些,把三部分都设置为相同的即可。每个部分我们要修改 login 为实际的数据库用户名、password 修改为数据库用户登录密码,而 database 则是数据库的名字。
修改完成后,我们得确定一下是不是能够正确连接数据库。
打开 app/controller/default_controller.php 文件,修改 actionIndex() 函数的内容为:
|
function actionIndex() { $dbo = QDB::getConn(); $dbo->connect();
if ($dbo->isConnected()) { echo 'Connected !'; }
$this->view = null; }
|
然后重新访问 http://localhost/digg/public/ 如果看到 “Connected !” 说明我们已经成功连接到数据库了。
接下来我们通过 phpMyAdmin 或者其他工具,在数据库的 users 表中添加如下的记录:
|
INSERT INTO `digg_db`.`users` ( `username`, `password`, `created`, `updated` ) VALUES ( 'Kevin', '$1$La2.2S..$BttdNm9S7VeUS7ieZlZZW0', NOW( ) , NOW( ) );
|
很好,现在我们可以来感受一下 QeePHP 是不是很黄很暴力了 :D
打开一个命令行窗口,进入 digg 程序所在目录,并输入命令:
|
php scrīpt\generate.php model user users
|
命令的执行结果很简短,指出创建了一个 app/model/user.php 文件:
|
Create file 'D:\www\digg\app\model\user.php' successed.
|
打开 model/user.php 文件可以看到如下内容:
|
<?php
class User extends QDB_ActiveRecord_Abstract {
/** * 返回对象的定义 * * @static * * @return array */ static function __define() { return array( // 指定该 ActiveRecord 要使用的行为插件
'behavīors' => '',
// 指定行为插件的配置
'behavīors_settings' => array( # '插件名' => array('选项' => 设置),
),
// 用什么数据表保存对象
'table_name' => 'users',
// 指定数据表记录字段与对象属性之间的映射关系
// 没有在此处指定的字段,QeePHP 会自动设置将字段映射为对象的可读写属性
'fields' => array( // 主键应该是只读,确保领域对象的“不变量”
'user_id' => array('readonly' => true), // 对象创建时间应该是只读
'created' => array('readonly' => true), // 对象最后更新时间应该是只读
'updated' => array('readonly' => true),
/** * 可以在此添加其他属性的设置 */ # 'other_field' => array('readonly' => true),
/** * 添加对象间的关联 */ # 'other' => array('has_one' => 'Class'),
),
/** * 指定在数据库中创建对象时,哪些字段的值不允许由外部提供 */ 'create_reject' => 'user_id',
/** * 指定更新数据库中的对象时,哪些字段的值不允许由外部提供 */ 'update_reject' => '',
// 在保存对象时,会按照下面指定的验证规则进行验证。验证失败会抛出异常。
// 还可以通过对象的 ::validate() 静态方法对数组数据进行验证。
'validation' => array( 'username' => array( array('not_empty', '用户名不能为空'), array('max_length', 20, '用户名不能超过 20 个字符'), ), 'password' => array( array('not_empty', '加密后的密码不能为空'), array('max_length', 70, '加密后的密码不能超过 70 个字符'), ), ), ); }
/* ------------------ 以下是自动生成的代码,不能修改 ------------------ */
/** * 开启一个查询,查找符合条件的对象或对象集合 * * @static * * @return QDB_ActiveRecord_Select */ static function find() { $args = func_get_args(); return parent::__find(__CLASS__, $args); }
/** * 实例化所有符合条件的对象,并调用这些对象的 destroy() 方法,返回成功删除的对象的数量 * * @static * * @param mixed $where * * @return int */ static function destroyWhere($where) { $args = func_get_args(); array_shift($args); return parent::__destroyWhere(__CLASS__, $where, $args); }
/** * 对数据进行验证,返回所有未通过验证数据的名称错误信息 * * @param array $data * * @return array */ static function validate(array $data, $fields = null) { return parent::__validate(__CLASS__, $data, $fields); }
/* -------------------------------------------------------------------- */
}
?>
|
不要被这么多代码吓到,我们目前需要关心的只有一个地方。
找到代码中的:
|
// 指定该 ActiveRecord 要使用的行为插件 'behavīors' => '',
|
修改为:
|
// 指定该 ActiveRecord 要使用的行为插件 'behavīors' => 'acluser',
|
做完这步,我们的 User 类就整装待发了!
打开 app/controller/default_controller.php 文件,修改 actionIndex() 函数的内容为:
|
function actionIndex() { $user = User::find('username = ?', 'Kevin')->query();
echo 'Username: '; echo $user->username;
$this->view = null; }
|
现在刷新浏览器可以看到我们成功的从数据库读取了 Kevin 这个用户的信息。
再来试试看创建新对象并保存到数据库:
|
function actionIndex() { // 创建一个新对象并保存 $username = 'rand ' . mt_rand(); $new_user = new User(); $new_user->username = $username; $new_user->password = '123456'; $new_user->save();
// 读出刚刚创建的对象 $user = User::find('username = ?', $username)->query(); echo 'New username: '; echo $user->username;
$this->view = null; }
|
刷新浏览器可以看到出现不同的用户名:
并且通过 phpMyAdmin 可以看到 users 表已经增加了新数据:
如果细心,会发现 password 字段的内容并不是我们为对象指定的 '123456',而是加密过后的字符串。这就是我们先前为 User 指定的 acluser 行为插件的功劳了。至于什么是行为插件,以后再来详细解说吧。
通过这一篇教程,我们成功的连接了数据库,还在数据库中添加了不少垃圾数据。下一篇我们就来实现 digg 程序的第一个功能:用户注册。
原文地址:http://qeeify.com/index.php/2008/03/19/begin-app-3.html
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:http://www.fleaphp.org/。