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([模块/]控制器标志/操作方法)  实例化对象同时调用指定方法

---恢复内容结束---

时间: 2024-12-25 14:23:17

TP框架基础2的相关文章

TP框架基础

什么框架:一堆代码的集合,里边有变量.函数.类.常量,里边也有许多设计模式MVC.AR数据库.单例等等. 为什么使用框架:框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次. thinkphp 3.2版本 ThinkPHP文件: [框架项目部署] 部署一个Shop项目,使用tp框架,步骤: 1.创建入口文件:在ThinkPHP目录下创建一个入口文件index.php 2.应用入口文件 // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0

TP框架基础(一)

[使用框架]  官网:thinkphp.cn.  目前建议使用thinkPHP3.2版本 一.结构目录>Thinkphp文件夹,是thinkPHP的核心文件,里面的内容是不允许我们修改的 >Public是公有的文件夹,里面可以写自己的东西>Application 我们建立项目的文件夹(Public和Application里面原有自带的文件可以删除,相当于两个空的文件夹)>tp文件夹中的index.php 是所有程序的入口文件 >conf 文件夹->配置文件,几乎包括关于

PHP TP框架基础

TP框架 入口文件:index.php application:存放项目的文件夹(可改)jiaowu:(新建的存放项目的文件夹){ common:存放函数 home:模块 { common:存放函数 conf:配置文件夹->config.php修改配置文件 controller:逻辑层(实现业务逻辑)<重要层面> model:模型层(操作数据,数据访问,数据连接) view:视图层(显示模板) ( 三层架构mvc: 约定胜于配置 1.不同的文件根据不同的内容有不同的存储路径 2.遵循命名

TP框架基础(三)

[系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: > APP_PATH =>string'./shop/' 项路径目> MODE_PATH 模型路径> __SELF__ 自身路径 > '__APP__'=>string'/ThinkPHP/index.php' 入口文件 > __MODULE__ =>string'/ThinkPHP/index.php/Home' 当前模块路径 > __ACTION__ 当前方法的路径 >

TP框架基础(四)----添加数据

[数据添加] add() 该方法返回被添加的新记录的主键id值 两种方式实现数据添加 1. 数组方式数据添加 $goods = D(“Goods”); $arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’); //注意:goods_name和goods_weight是数据表中字段名称 $goods -> add($arr); 2 .AR方式实现数据添加 a) ActiveRecord  活跃记录 b) AR规定了程序与数据

tp框架基础(详细步骤分解,易懂)下

在浏览器中如果要访问操作方法的时候以什么方式来访问 有四种方式 第一种是get方式,第二种是访问路径 这四种方式我们可以通过修改配置文件来改掉url的模式 我们需要来改一下我们的配置文件 在这个路径下来改配置,打开这个文件 改什么配置呢 再打开这个路径下的文件 找到这个文件url打头的 把这句话复制一下,把它拿到我们自己的配置文件里粘贴 在这里面进行修改 这里有个数字,代表我们的访问模式,如果是0的话,就是普通方式,get方式,如果改1的话,就是路径模式,如果改2的话就是重写模式,如果是3的话就

tp框架基础知识

作者:黄力军 index.php入口文件:作用,所有tp框架里的内容要想访问文件.都要走index.php文件他是整个程序的入口 Application代表应用程序的目录   所有写的应用程序放这里 Public公用目录   里面放公用的东西比如css js ThinkPHPtp框架核心文件夹.Thinkphp核心文件夹里分为如下 ThinkPHP.php是tp框架的核心类 Common里面存放tp框架里面的函数方法 Conf文件夹里面要注意*代表配置文件特别是convention 文件tp框架

TP框架基础 (二) ---空控制器和空操作

通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控制器中的Login方法,首先我们要创建一个Login控制器对应的模板文件夹,该文件夹就对应着Login控制器: 然后在Login文件夹下再创建一个login.html的模板文件来对应Login控制器下的Login方法: 在login.html里面写入要显示的代码: 然后再次请求: [url地址大小写

tp框架基础控制器调用方法

public function indd(){ //调用该控制器下的某个方法 $this ->index(); //跨控制器调用 $k = A("index");// 创建控制器对象 $k -> index(); //跨模块调用 $k = A("home/index"); $k -> index(); }