
/**
* ThinkPHP version 3.1.3
* 部署方式:应用部署
* 文内的 http://localhost/ 由实际主机地址代替
*/
入口文件 index.php:
<?php define('THINK_PATH','./ThinkPHP/');
//定义项目名称和路径
define('APP_NAME','Myapp');
define('APP_PATH','./home/');
define('APP_DEBUG',true);
//加载框架入口文件
require(THINK_PATH."ThinkPHP.php");
index.php
配置信息 config.inc.php:
<?php return array( 'URL_CASE_INSENSITIVE'=>true,
'DB_TYPE'=>'mysql',
'DB_HOST'=>'localhost',
'DB_NAME'=>'tp',
'DB_USER'=>'root',
'DB_PWD'=>'',
'DB_PREFIX'=>'tpk', 'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
);
访问入口文件 index.php ( http://localhost/index.php ) 后自动生成 ./home 目录。
index 初始页面的内容由 ./home/Lib/Action/IndexAction.class.php 文件显示:
<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
public function index(){
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
}
}
IndexAction.class.php
( 一 ) 控制器的调用
现在修改 IndexAction.class.php,使用 A 函数调用本项目控制器:
<?php class IndexAction extends Action { public function test(){ $obj = A("Member");
$obj->user();
}
}
A 函数相当于 new,A("Member") 表示实例化本项目中的 Member 控制器,然后再调用 Member 控制器中的 user 方法。user 方法 ( MemberAction.class.php ):
<?php class MemberAction extends Action{ public function user(){
$this->assign("user","dee0912");
$this->display();
}
}
因为在 Index 控制器 中的 test 动作调用了 Member 控制器的 user 方法 ( 因为此处的 user 动作已被实例化,因此此处不能成为动作,而是作为类的方法 ) 的 $this->display(),所以需要在当前动作 ( test 动作 ) 中输出模板 ( ./home/Tpl/Index/test.html ) :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
欢迎使用 ThinkPHP.<br>
您的用户名是<{$user}>
</body>
</html>
test.html
通过 PATHINFO 模式的 url ( http://localhost/index.php/index/test ,我的主机地址是127.0.0.26 ) 可以访问 Index 控制器的 test 动作
可以使用 R 函数来代替 A 函数,R 函数可以在调用控制时指定调用方法 ( 动作 ),修改 IndexAction.class.php:
<?php class IndexAction extends Action { public function test(){ $obj = R("Member/user"); //使用 R 函数调用本项目的控制器
}
}
可以达到同样的效果。
( 二 ) 空控制器与空动作
空控制器和空动作可以实现错误 404 的功能 ( 但是不能取代服务器错误页面处理机制,空控制器和空动作只能处理 MVC 框架内的页面,而且也不能处理 URL REWRITE 自定义格式的页面 )。
1、空控制器
当用户访问的 URL 不存在需要访问的控制器时,可以使用空控制器,例如访问 http://localhost/index.php/bbs,实际上不存在控制器 BbsAction,系统会给出错误 ( 需要在入口文件 index.php 开启 define('APP_DEBUG',true); ):
现在在项目目录 ( ./home/Lib/Action ) 下创建控制器类文件 EmptyAction.class.php :
<?php class EmptyAction extends Action{ public function index(){ $this->assign("msg","你所查看的栏目已经不存在");
$this->display("./Public/html/error.html");
}
}
同时在 WEB 根目录的 Public/html 下创建error.html,这样访问 http://localhost/index.php/bbs 出现的就是自定义的信息内容。
视图文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body><{$msg}></body>
</html>
error.html
页面显示:
2、空动作
相较空控制器定位到栏目,空动作则是定位到具体的页面。如果 Index 控制器中不存在 user 动作,只需要在 Index 控制器中加入空动作,系统会把 _empty 动作代替 user 动作:
<?php class IndexAction extends Action { public function test(){ $obj = R("Member/user");
} public function _empty(){ $this->assign("msg","你所查看的页面不存在");
$this->display("./Public/html/error.html");
}
}
页面显示:
参考资料:《PHP MVC 开发实战》