1.目录解析和系统配置
项目目录结构解析
以前文的项目构建为例,在网站根目录下的文件及目录为:
- ThinkPHP:ThinkPHP 框架包文件夹
- index.php:项目入口文件
- myweb:项目文件夹
- Public:公共目录,存放 css,javascript 等公共文件,手工创建
第一次运行项目入口文件时,系统会自动生成项目目录结构,在 myapp 下:
- Common:项目公共文件目录,一般放置项目的公共函数
- Conf:项目配置目录,配置文件放该目录下
- Lang:项目语言包目录(可选),作为多语言支持
- Lib:项目类库目录,通常包括 Action、Behavior、Model、Widget 子目录
- Tpl:项目模板目录,支持不同模板主题
- Runtime:项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录
return array(
//'配置项'=>'配置值'
'APP_STATUS' => 'debug', //调试模式开启
'SHOW_PAGE_TRACE' =>true, //调试模式时要设置
'DB_TYPE' => 'mysql', // 数据库类型
'DB_NAME' => 'test', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123', // 密码
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 数据库表前缀
'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8
'DB_MASTER_NUM' => 1, // 读写分离后,主服务器数量
);
'URL_CASE_INSENSITIVE' => false, // 默认false 表示URL区分大小写 true则表示不区分大小写
'URL_MODEL' => 1, // URL访问模式,可选参数0、1、2、3,代表四种模式
'URL_HTML_SUFFIX' => '', // URL伪静态后缀设置
进入 Myweb\\Lib\\Action 目录,里面有个 IndexAction.class.php 文件。该文件为刚才我们运行入口文件 index.php 时系统自动生成的。打开该文件,其内容大致如下(方法内具体代码省略):
<?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action{ public function index(){ 具体代码略…… } } ?>
该文件已经演示了一个基于 ThinkPHP 的实际应用。
ThinkPHP 控制器
像上面这个 IndexAction.class.php 这样的特殊文件,称为控制器。该类文件通常位于 LibAction 下面,命名方式必须以“模块名+Action.class.php”样式来命名,如 IndexAction.class.php ,详细可参考《ThinkPHP 命名规范》一节。
ThinkPHP 模块
一个控制器对应一个模块。如 IndexAction.class.php 就对应 Index 模块,相应的类名为 IndexAction ,如上面的例子:
class IndexAction extends Action
ThinkPHP 操作
一个模块(类)里有多个方法,称之为“操作”。如上面例子的 index 方法:
public function index()
我们更改上面的 IndexAction.class.php 为:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); echo "第一个例子测试!"; } } ?>
再次访问网站首页(入口文件):
http://localhost/index.php
浏览器显示内容为在 index 操作中输出的:
第一个例子测试!
而不是原来的默认欢迎界面。
增加操作
要增加一个操作,只需在模块里增加一个定义为 public 方法即可。在 IndexAction.class.php 里面新增加一个 test 操作:
public function test(){ header("Content-Type:text/html; charset=utf-8"); echo "这是 test 操作"; }
要访问该操作,浏览器地址为:
http://localhost/index.php/Index/test
浏览器输出如下:
这是 test 操作
可见要访问其他方法,需要在入口文件 URL 地址后面加上“模块/操作”才可以。关于通过入口文件 URL 地址访问模块方法的具体信息,请参看《ThinkPHP URL 访问模式》一节。
同模块调用其他操作
在同一个模块中,一个操作常常要调用其他操作(一般都是私有方法,通常都是独立的能被重复使用的功能模块),由于是在一个模块里(一个类里),因此使用 $this 可以很方便的调用其他操作:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); echo "第一个例子测试!"; $this->test(); } } ?>
上面是将前面的 index 操作加上调用 test 操作的例子,运行 index 操作输出如下:
第一个例子测试!这是 test 操作
可见不仅 index 里面的 echo 语句执行了,test 操作里面的 echo 也执行了。这部分是属于 PHP 类与对象的知识,更多请参见PHP基础教程之《PHP 类与对象》一节的内容。
小结
- 控制器类文件名为 IndexAction.class.php 这种固定格式,对应 Index 模块,类名为 IndexAction
- 我们自定义的模块里面的类由 ThinkPHP的 基类 Action 继承而来,其遵循 PHP 的类继承属性
- 一个 Web 页面对应一个方法(反之则不一定),且该方法必须定义为 public 类型
- 一个控制器文件里面只能有一个模块可用,但模块(类)可以有多个方法,也可以没有方法
3如何开启DEBUG模式
刚刚入门的新手可能比较奇怪,明知道出错了,可是页面就是一片空白,什么都没显示,那么怎么开启debug模式呢?
首先在入口文件index.php中加入这句
//开启调试模式
define('APP_DEBUG',true);
然后Conf下的config.php也要修改一下
增加2行
'APP_STATUS' => 'debug', //调试模式开启
'SHOW_PAGE_TRACE' =>true, //调试模式时要设置
由于这个错误信息依赖于模板文件输出,所以一定要display出来,就像下面的
public function index(){
$Dao = M('User');
$user_list = $Dao->select();
$this->display();
}
开启成功后,页面的右下角会有一个div块,点击展开能看到各种信息,如吞吐量,错误信息,执行时间等等。
4.数据库配置与访问
首先要设置好config.php中的参数 (上面第一点的配置已经有涉及)
以下一个简单的例子,debug模式下,如果没有报错,证明数据库连接成功了
public function test(){
$Dao = M('user'); //实例化user模型类
$user_list = $Dao->select();
echo "<pre>";
print_r( $user_list);
echo "</pre>";
$this->display();
}