首先, 在本地服务器中新建项目APP,依据第一讲中的步骤配置好thinkphp,这里为了测试方便,不分前台和后台模块,统一把模块路径设为'./APP/'。
1、新建数据库myapp,以及数据库表think_form;
2、在配置文件APP/Conf/config.php中写入:
<?php
return array(
//'配置项'=>'配置值'
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => '127.0.0.1', // 服务器地址
'DB_NAME' => 'myapp', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '', // 密码
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀
);
?>
其中端口为字符串需要加引号,之前把3306看成int数据类型,结果一直搞不定;
3、在控制器APP/Lib/IndexAction.class.php中写入:
<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
public function index(){
$m=new Model('Form');
$arr=$m->select();
var_dump($arr[0]['title']);
}
}
?>
注:上面的语句具体解释为:$m=new Model(数据库表后缀名);后缀名首字母大小不限。注意只能是数据库表后缀名,不能是完整的数据库表名,否则读取数据失败,显示数据为null。也可以采用$m=M(数据库表后缀名);或者$m=D(数据库表后缀名);
最后,在浏览器中运行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到数据字段的数据。
再注:之前连接时在入口文件内没有加入define('APP_DEBUG', true);结果数据库始终读取失败,而加了之后忽然成功了,再次注释掉也可以读取。难道说这一道程序是必须的?搞不懂情况?反正thinkphp操作超蛋疼。
4、上面的操作基本可以读取数据库了,但对于MVC要把控制器C和视图V联系,还需要再加一道工序:
(1)在控制器APP/Lib/IndexAction.class.php中加入:
$this->assign('data',$arr[0]['title']);
$this->display();//此方法为在视图V中输出显示数据的必要条件。
(2)在APP/Tpl目录中新建Index目录(由于控制器中的类名为IndexAction ,此处必须为Index,如果要改成其他目录名,首先要把IndexAction类的Index改成其他字符串(首字母必须大写),文件名改为:目标字符串(如Str)+Action.class.php,如果要建立此控制器的视图,则要在Tpl目录下创建目录名为Str的目录,再在目录中创建文件),再在Index目录下新建index.html,写入HTML语句,加入{$data}变量(因为在控制器中通过assign方法为$data进行了定义和赋值,想分配变量可以使用assign方法)。
在浏览器中运行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到数据字段的数据。
总之,thinkphp连接数据库超蛋疼!!记得加入define('APP_DEBUG', true);防止麻烦出现。
附1:
url的4种访问方式 //重点!
1.PATHINFO 模式 -- 重点!!!!!! http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2
2.普通模式
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2
3.REWRITE模式
http://域名/项目名/模块名/方法名/键1/值1/键2/值2
4.兼容模式
附2:
控制器数据库操作CURD命令:
增 -C Create $m->add()
删 -D Delete $m->delete()
改 -U Update $m->save()
查 -R Read $m->select()
附3:
模型遍历数组方法:
控制器的语句:public function index(){
$m=new Model('Form'); //$m=new Model(数据库表后缀名);实例化模型
$arr=$m->select();
//var_dump($arr[0]['title']);
//$name='ken';
//$this->assign('data',$name);
$this->assign('data',$arr);
$this->display();
}
视图V的语句:
<h1>
<volist name='data' id='vo'>
{$vo.id}<br>
{$vo.title}<br>
</volist>
</h1>
<volist>标签是模型遍历数组的关键,属性name为控制器中接收过来的后台变量,id为前台输出的实例对象变量。