ThinkPHP采用模块和操作分析


Posted in PHP onApril 18, 2011

任何一个WEB行为都可以认为是一个模块的某个操作,系统会根据当前的URL来分析要执行的模块和操作。这个分析工作由URL调度器来实现,官方内置了Dispatcher类来完成该调度。 在Dispatcher调度器中,会根据
http://servername/appName/moduleName/actionName/params
来获取当前需要执行的项目(appName)、 模块(moduleName)和操作(actionName),在某些情况下,appName可以不需要(通常是网站的首页,因为项目名称可以在入口文件 中指定,这种情况下,appName就会被入口文件替代)。在复杂一点的情况下面,可能还会出现分组(groupName)。
每个模块是一个Action文件,类似于我们平常所说的控制器,系统会自动寻找项目类库Action目录下面的相关类,如果没有找到,则会定位到空模块,否则抛出异常。
而actionName操作是首先判断是否存在Action类的公共方法,如果不存在则会继续寻找父类中的方法,如果依然不存在,就会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出。
因此应用开发中的一个重要过程就是给不同的模块定义具体的操作。一个应用如果不需要和数据库交互的时候可以不需要定义模型类,但是必须定义Action控制器。 Action控制器的定义非常简单,只要继承Action基础类就可以了,例如:microfiber cloth

class UserAction extends Action{ 
}

如果我们要执行下面的URL
http://servername/index.php/User/add
你需要增加一个add方法就可以了,例如
折叠PHP Code复制内容到剪贴板
class UserAction extends Action{ 
// 定义一个add操作方法,注意操作方法不需要任何参数 
Public function add(){ 
// add操作方法的逻辑实现 
// …… bath rug 
$this->display(); // 输出模板页面 
} 
}

操作方法必须定义为Public类型,否则会报错。并注意操作方法的命名不要和内置的Action类的方法重复。系统会自动定位当前操作的模板文件,而默认的模板文件应该位于项目目录下面的Tpl\default\User\add.html。
PHP 相关文章推荐
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php记录日志的实现代码
Aug 08 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php判断是否为json格式的方法
Mar 04 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
Yii rules常用规则示例
Mar 15 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
PDO::rollBack讲解
Jan 29 PHP
解决laravel session失效的问题
Oct 14 PHP
关于PHP求解三数之和问题详析
Nov 09 PHP
PHP学习之数组值的操作
Apr 17 #PHP
PHP学习之数组的定义和填充
Apr 17 #PHP
PHP学习之正则表达式
Apr 17 #PHP
PHP学习之字符串比较和查找
Apr 17 #PHP
PHP学习之整理字符串
Apr 17 #PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 #PHP
PHP基础学习小结
Apr 17 #PHP
You might like
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php批量删除操作代码分享
2017/02/26 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
JS随机排序数组实现方法分析
2017/10/11 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
酒店总经理工作职责
2013/12/13 职场文书
2014国培学习感言
2014/03/05 职场文书
升职演讲稿范文
2014/05/23 职场文书
新闻传播专业求职信
2014/07/22 职场文书
房屋租赁协议书
2014/10/18 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
Django框架中表单的用法
2022/06/10 Python