空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化。

大理石平台价格表

现在我们把前面的需求进一步,把URL由原来的

  1. http://serverName/index.php/Home/City/shanghai/

变成

  1. http://serverName/index.php/Home/shanghai/

这样更加简单的方式,如果按照传统的模式,我们必须给每个城市定义一个控制器类,然后在每个控制器类的index方法里面进行处理。可是如果使用空控制器功能,这个问题就可以迎刃而解了。

我们可以给项目定义一个EmptyController类

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class EmptyController extends Controller{
  5. public function index(){
  6. //根据当前控制器名来判断要执行那个城市的操作
  7. $cityName = CONTROLLER_NAME;
  8. $this->city($cityName);
  9. }
  10. //注意 city方法 本身是 protected 方法
  11. protected function city($name){
  12. //和$name这个城市相关的处理
  13. echo '当前城市' . $name;
  14. }
  15. }

接下来,我们就可以在浏览器里面输入

  1. http://serverName/index.php/Home/beijing/
  2. http://serverName/index.php/Home/shanghai/
  3. http://serverName/index.php/Home/shenzhen/

由于系统并不存在beijing、shanghai或者shenzhen控制器,因此会定位到空控制器(EmptyController)去执行,会看到依次输出的结果是:

  1. 当前城市:beijing
  2. 当前城市:shanghai
  3. 当前城市:shenzhen

如果你的默认控制器层不是Controller的话,空控制器也会随之改变,例如默认的控制器层是Action:

  1. 'DEFAULT_C_LAYER' => 'Action', // 默认的控制器层名称

那么可能你的空控制器定义就变成了EmptyAction类:

  1. <?php
  2. namespace Home\Action;
  3. use Think\Controller;
  4. class EmptyAction extends Controller{
  5. public function index(){
  6. //根据当前控制器名来判断要执行那个城市的操作
  7. $cityName = CONTROLLER_NAME;
  8. $this->city($cityName);
  9. }
  10. //注意 city方法 本身是 protected 方法
  11. protected function city($name){
  12. //和$name这个城市相关的处理
  13. echo '当前城市' . $name;
  14. }
  15. }

空控制器和空操作还可以同时使用,用以完成更加复杂的操作。

 

thinkphp 空控制器的更多相关文章

  1. thinkphp空控制器的处理

    <?php namespace Admin\Controller; use Think\Controller; class DengLuController extends Controller ...

  2. Thinkphp 空操作、空控制器、命名空间

    1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Hom ...

  3. thinkphp的空控制器和空操作以及对应解决方法

    在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法.控制器会怎么样呢? 先看一下定义: 空操作:一个对象(控制器)调用本身不存在的方法 空控制器:在实例化控制器对象的 ...

  4. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  5. ThinkPHP空操作和空控制器的处理

    所谓的空操作和空控制器,简而言之就是系统中不存在该方法或控制器,导致系统报错(本文版本3.2.3). 正确URL(测试环境):  http://oa.com/index.php/admin/publi ...

  6. TP框架 ---空控制器和空操作

    通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...

  7. thinphp讲解(三)——空操作、空控制器、跨控制器、命名空间

    一.“空操作”本质意思:一个对象(控制器)调用本身不存在的操作方法 一般网站处于安全考虑不给用户提示任何错误信息 在tp里面控制器controller.class.php里有个_call()方法 所以 ...

  8. thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)

    原文:thinkPHP 空模块和空操作.前置操作和后置操作 详细介绍(十四) 本章节:介绍 TP 空模块和空操作.前置操作和后置操作 详细介绍 一.空模块和空操作 1.空操作 function _em ...

  9. TP框架部分---空控制器

    <?php namespace Admin\Controller; use Think\Controller; class DengLuController extends Controller ...

随机推荐

  1. android中的Handler消息传输机制

    android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就导致新启动的线程无法动态的改变界面组件的属性值.但是实际android应用开发中,需要新启动的线程周期性地 ...

  2. 使用fastClick.js所产生的一些问题

    开发h5活动页时想到移动端会有300ms的延迟,于是便打算用fastClick.js解决. 页面引入fastClick.js后,滑动H5页面的时候发现谷歌浏览器会报错,如下: Unable to pr ...

  3. mysql的各种锁简单总结

    表总体上分为三种: 1.表锁 Myisam 开销小,并发低,加锁快,不会出现死锁问题:锁粒度大,发生锁冲突的概率最高. 2.行锁 innodb  开销大,并发高,加锁慢,会出现死锁问题:锁粒度小,发生 ...

  4. Keepalived+LVS+nginx搭建nginx高可用集群

    1. 环境准备 1. VMware; 2. 4台CentOs7虚拟主机:192.168.122.248,192.168.122.68, 192.168.122.110, 192.168.122.167 ...

  5. Python中的网络爬虫怎么用?

    爬虫概述 (约2016年)网络爬虫个人使用和科研范畴基本不存在问题,但商业盈利范畴就要看对方了. 通过网站的Robots协议(爬虫协议)可以知道可以和不可以抓取的内容,其中User-Agent: 为允 ...

  6. Centos7.5 安装sonarqube-7.1

    下载sonarqube-7.1 wget -t 0 -c https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.1.z ...

  7. ArrayList集合二

    集合的遍历 通过集合遍历,得到集合中每个元素,这是集合中最常见的操作.集合的遍历与数组的遍历很像,都是通过索引的方式,集合遍历方式如下 13 import java.util.ArrayList; 1 ...

  8. 【转载】带你吃透RTMP

    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...

  9. QueryList getData()方法中多次调用来实现递归多级采集。

    <?php require 'QueryList/vendor/autoload.php'; use QL\QueryList; //获取每个li里面的h3标签内容,和class为item的元素 ...

  10. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...