TP框架基础2
---恢复内容开始---
【空操作和空控制器处理】
空操作:就没有指定的操作方法
空控制器:没有指定控制器
http://网址/index.php/Home/User/login
http://网址/index.php/Home/User/hello 空操作,没有hello方法
http://网址/index.php/Home/beijing/login 空控制器,没有beijing控制器
空操作:

一般网站处于安全考虑不给用户提示任何错误信息
“空操作”本质意思:一个对象(控制器)调用本身不存在的方法
在OOP里边,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法:function __call();
在tp里面控制器的父类:
/**
* 魔术方法 有不存在的操作的时候执行
* @access public
* @param string $method 方法名
* @param array $args 参数
* @return mixed
*/
public function __call($method,$args) {
if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {
if(method_exists($this,'_empty')) {
// 如果定义了_empty操作 则调用
$this->_empty($method,$args);
}elseif(file_exists_case($this->view->parseTemplate())){
// 检查是否存在默认模版 如果有直接输出模版
$this->display();(不好用)
}else{
E(L('_ERROR_ACTION_').':'.ACTION_NAME);
}
}else{
E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
return;
}
}
所以空操作有两种解决方案:
① 在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用)

② 给空操作的名称制作一个同名的模板出来,系统会自动调用(此方法不好用,客户输入的不一定与模板同名,有太多不确定性)

在模板Test.html中制作模板:
</head>
<body>
<h1>该网页不存在 </h1>
</body>
</html>

空控制器:
空控制器:在实例化控制器对象的时候,没有找到指定的类
什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php
熟记文件:
index.php 入口文件
ThinkPHP/ThinkPHP.php 框架核心文件
ThinkPHP/Library/Think/Think.class.php 框架核心文件
ThinkPHP/Library/Think/App.class.php 框架应用文件
在App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容:
// 是否定义Empty控制器
$module = A('Empty');//相当于new一个empty
if(!$module){
E(L('_CONTROLLER_NOT_EXIST_').':'.CONTROLLER_NAME);
}
}
空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php
在该控制器内部其实只需要制作一个_empty()方法即可。

写入方法:
function _empty()
{
echo "空控制器!";
}
这样再次请求:

【跨控制器调用】
一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。
跨控制器调用可以节省我们代码的工作量
在Main控制器中有一个Info操作方法


想要在其它控制器,比如Login中调用,我们可以实例化控制器对象,调用里面的方法即可:


造对象有快捷函数供我们使用:
A(“[模块/]控制器标志”) 实例化控制器对象

R([模块/]控制器标志/操作方法) 实例化对象同时调用指定方法

---恢复内容结束---
TP框架基础2的更多相关文章
- TP框架基础
什么是TP框架: 一堆代码的集合,里边有变量.函数.类.常量,设计模式MVC.AR数据库.单例等等.全称是Tinkphp框架; 为什么使用框架: 使用框架将全部精力集中在业务层次,节省50-60%的工 ...
- TP框架 基础1
php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...
- tp框架基础知识
作者:黄力军 index.php入口文件:作用,所有tp框架里的内容要想访问文件.都要走index.php文件他是整个程序的入口 Application代表应用程序的目录 所有写的应用程序放这里 ...
- tp框架基础(详细步骤分解,易懂)下
在浏览器中如果要访问操作方法的时候以什么方式来访问 有四种方式 第一种是get方式,第二种是访问路径 这四种方式我们可以通过修改配置文件来改掉url的模式 我们需要来改一下我们的配置文件 在这个路径下 ...
- TP框架基础(四)----添加数据
[数据添加] add() 该方法返回被添加的新记录的主键id值 两种方式实现数据添加 1. 数组方式数据添加 $goods = D(“Goods”); $arr = array(‘goods_name ...
- TP框架基础(三)
[系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: >系统常量信息里经常用到的是user里的路径 > APP_PATH =>string'./shop/' 项目路 ...
- TP框架基础(一)
[使用框架] 官网:thinkphp.cn. 目前建议使用thinkPHP3.2版本 一.结构目录>Thinkphp文件夹,是thinkPHP的核心文件,里面的内容是不允许我们修改的 > ...
- TP框架基础 (二) ---空控制器和空操作
通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...
- tp框架的详细介绍,tp框架基础
php框架 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一 ...
随机推荐
- linux命名对文件的读写和退出
vi xxx.txt 打开就能看到里面的内容.按 i 进入编辑模式,然后就可以输入内容了,也可以移动光标到你要删除内容的位置按删除键来删除内容.编辑完后可以按 Esc(键盘左上角) 进入命令模式.然后 ...
- win下如何查看那个网络端口被那个应用程序使用
在运行里面键入cmd打开命令行窗口. 在命令行窗口键入命令: netstat -ano 第一和第二列是自己网络的端口和外网连接的端口,pid:(全称Process Identification ...
- 开发人员需知的Web缓存知识(转)
什么是Web缓存,为什么要使用它? 缓存的类型: 浏览器缓存: 代理服务器缓存: 网关缓存: Web缓存无害吗?为什么要鼓励缓存? Web缓存如何工作 如何控制缓存和不缓存: HTML Meta标签 ...
- oracle 里 插入空字符串会被转成null插入
oracle 里 插入空字符串会被转成null插入 因为非空列如果要插入空字符串数据,最好是插个空格,因为空字符串会报错
- 使用Array的原型使对象具有length,和数组的内容
var elems = { length: , add: function (elem) { Array.prototype.push.call(this, elem); }, gather: fun ...
- Oracle10g RAC 关闭及启动
情况1: 保养数据库及操作系统,服务器,需要关闭DB(所有实例),OS 及Server . a. 首先停止Oracle10g 环境 $ lsnrctl stop (每个节点上停止监听,也可以用srvc ...
- jquery 复选框全选/全不选切换 普通DOM元素点击选中/取消选中切换
1.要选中的复选框设置统一的name 用prop() prop() 方法设置或返回被选元素的属性和值. $("#selectAll").click(function(){ $(&q ...
- C语言程序设计-同一天生日[综合应用]
[问题描述] 在一个有200人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日,试找出所有生日相同的学生. [输入形式] 第一行为整数n,表示有n个学生,n<=200. ...
- 【转】MySQL常用命令总结
http://blog.csdn.net/qq_33850438/article/details/52144686 MySQL常用的基本操作,以下都是MySQL 5.0下测试通过首先说明下,记住在每个 ...
- (转)QT中QWidget、QDialog及QMainWindow的区别
QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...