ThinkPHP 学习笔记 ( 二 ) 控制器 ( Controller )
/**
* 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 开发实战》
ThinkPHP 学习笔记 ( 二 ) 控制器 ( Controller )的更多相关文章
- ThinkPHP学习笔记(二)
1.比较好的参考手册(非官方,注意:也有一些错误,当出不来想要的效果时以官方的手册为准):http://www.5idev.com/p-thinkphp_lib_vendor.shtml 2.加载自定 ...
- thinkphp学习笔记4—眼花缭乱的配置
原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...
- thinkphp学习笔记7—多层MVC
原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...
- thinkphp学习笔记5—模块化设计
原文:thinkphp学习笔记5-模块化设计 1.模块结构 完整的ThinkPHP用用围绕模块/控制器/操作设计,并支持多个入口文件盒多级控制.ThinkPHP默认PATHINFO模式,如下: htt ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- thinkphp学习笔记6—url模式
原文:thinkphp学习笔记6-url模式 入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作.ThinkPHP是区分大小写 ...
- AngularJs学习笔记--Understanding the Controller Component
原版地址:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_model 在angular中,controller是一个javasc ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
随机推荐
- Android之圆角矩形
安卓圆角矩形的定义 在drawable文件夹下,定义corner.xml <?xml version="1.0" encoding="utf-8"?> ...
- 一、HTML和CSS基础--HTML+CSS基础课程--第6部分
第十一章 CSS代码缩写,占用更少的带宽 盒模型代码简写 :还记得在讲盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上 ...
- C#对XML进行操作(添加、修改)
XML文档内容如下: <?xml version="1.0" encoding="utf-8"?> <root> <first i ...
- 菜鸟学Linux命令:chmod命令和数字文件权限
chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限 ...
- PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例
网上关于七牛云存储的教程除了官网上的API文档,其他的资料太少了.研究了下API之后,现在已经能实现图片的上传和下载及上传之后的重定向. http://blog.csdn.net/cqcre/arti ...
- 使用awk排除第一行和第二行的数据
因为linux shell命令行输出的前面几行一般是指导或是格式字段说明, 而不是实现的数据,所以在作过滤时,一般需要排除前面的几行. 现需要找出指定机器开放的所有端口. 我遇到的情况是要排除前面两行 ...
- Xamarin.Android开发实践(十七)
Xamarin.Android之定位 一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定位,从而使我们的生活更加方便,所以本章我们将学习如何在Xamarin中进行定位的开发. 二.准备工作 ...
- Windows环境下Sybase12.5 图文安装教程
先准备好安装文件,解压缩ASE install.rar文件,文件夹中包含一个setup.exe可执行文件,双击运行 --- > 欢迎界面出现 下面选择相应国家的协议,我们选择“中华人民共和国”, ...
- JAVA 正则表达式、汉字正则、 java正则代码
转自于:http://blog.csdn.net/q326527970/article/details/7513974 (一)字母.数字.下划线.汉字正则表达式 1. 只有字母.数字和下划线且不能以下 ...
- Android虚拟机中的sqlite数据库文件
Android虚拟机中的sqlite数据库文件 ①