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 相关文章推荐
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
Jun 12 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
PHP chunk_split()函数讲解
Feb 12 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
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
学习ExtJS form布局
2009/10/08 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
什么是python的自省
2020/06/21 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
如何理解委托
2012/01/06 面试题
二年级体育教学反思
2014/01/15 职场文书
五一活动标语
2014/06/30 职场文书
国际会计专业求职信
2014/08/04 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
教师先进个人材料
2014/12/17 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
Python的三个重要函数详解
2022/01/18 Python
对象析构函数__del__在Python中何时使用
2022/03/22 Python