初识ThinkPHP控制器


Posted in PHP onApril 07, 2016

本文的重点讲解的ThinkPHP控制器的定义、基本操作内容,希望大家可以对ThinkPHP控制器有初步的了解。

初识ThinkPHP控制器

最基本的控制器:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
  public function index(){

  }
  public function hello(){
    echo 'hello';
  }
}

控制器的名称采用驼峰法命名(首字母大写),控制器文件位于 Application/Home/Controller/IndexController.class.php

IndexController控制器类的hello方法就是操作方法,访问下面的URL地址:

http://serverName/Home/Index/hello
 就会输出"hello"

前置和后置操作:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

  public function _before_index(){
    echo "index.before<br>";
  }

  public function index(){
    echo "index<br>";
  }

  public function _after_index(){
    echo "index.after<br>";
  }
}

配置ACTION_SUFFIX改变操作方法书写方式:

因为操作方法就是控制器的一个方法,所以遇到有和系统的关键字冲突的方法可能就不能定义了,这个时候我们可以设置操作方法的后缀来解决,例如

'ACTION_SUFFIX'         =>  'Action', // 操作方法后缀
设置操作方法的后缀为Action,这样,控制器的操作方法定义调整为:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
  public function listAction(){
    echo 'list';
  }

  public function helloAction(){
    echo 'hello';
  }

  public function testAction(){
    echo 'test';
  }
}

空控制器和空操作方法:

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

初识ThinkPHP控制器

上图所示,当访问:

http://serverName/index.php/Home/City/beijing/
由于City控制器并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到依次输出的结果是:

你是怎么找到我的? 

操作绑定到类: (作用:可以实现为每个操作方法定义一个类,而不是控制器类的一个方法)

以URL访问为 http://serverName/Home/Index/index为例,

原来的控制器文件定义位置为:Application/Home/Controller/IndexController.class.php

控制器类的定义如下:

namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller{
  public function index(){
    echo '执行Index控制器的index操作';
  }
}

可以看到,实际上我们调用的是 Home\Controller\IndexController 类的index方法。

 通过配置文件设置参数

'ACTION_BIND_CLASS'    =>    True,
设置后,控制器文件位置改为:Application/Home/Controller/Index/index.class.php

控制器类的定义如下:

namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
  public function run(){
    echo '执行Index控制器的index操作';
  }
}

现在,我们调用的其实是 Home\Controller\Index\index 类的run方法。
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
PHP XML数据解析代码
May 26 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php实现源代码加密的方法
Jul 11 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
解决php扩展安装不生效问题
Oct 25 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
PHP中PDO的事务处理分析
Apr 07 #PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 #PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 #PHP
PHP的PDO常用类库实例分析
Apr 07 #PHP
PHP安全下载文件的方法
Apr 07 #PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 #PHP
PHP使用token防止表单重复提交的方法
Apr 07 #PHP
You might like
header跳转和include包含问题详解
2012/09/08 PHP
php 启动报错如何解决
2014/01/17 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php实现将Session写入数据库
2015/07/26 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
WSDL的操作类型主要有几种
2013/07/19 面试题
优秀共产党员推荐材料
2014/12/18 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers
vue使用element-ui按需引入
2022/05/20 Vue.js