# 模块和操作

[上一页](# "上一页")[下一页](# "下一页")

ThinkPHP采用模块和操作的方式来执行,首先,用户的请求会通过入口文件生成一个应用实例,应用控制器(我们称之为核心控制器)会管理整个用户执行的过程,并负责模块的调度和操作的执行,并且在最后销毁该应用实例。任何一个URL访问都可以认为是某个模块的某个操作,例如:

http://www.domain.com/App/index.php/User/read/id/8

http://www.domain.com/index.php/Home/User/read/id/8

系统会根据当前的URL来分析要执行的模块和操作。这个分析工作由URL调度器(Dispatcher)来实现,并且都分析成下面的规范:

http://域名/项目名/分组名/模块名/操作名/其他参数

Dispatcher会根据URL地址来获取当前需要执行的项目、分组(如果有定义的话)模块、操作以及其他参数,在某些情况下,项目名可能不会出现在URL地址中(通常情况下入口文件则代表了某个项目,而且入口文件可以被隐藏)。

每一个模块就是一个控制器类,通常位于项目的Lib\Action目录下面。类名就是模块名加上Action后缀,例如UserAction类就表示了User模块。控制器类必须继承系统的Action基础类,这样才能确保使用Action类内置的方法。而read操作其实就是IndexAction类的一个公共方法,所以我们在浏览器里面输入URL:

http://localhost/App/index.php/User/read/id/8

其实就是执行了UserAction类的read(公共)方法。

每个模块的操作并非一定需要有定义操作方法,如果我们只是希望输出一个模板,既没有变量也没有任何的业务逻辑,那么只需要按照规则定义好操作对应的模板文件即可,而不需要定义操作方法。例如,我们在UserAction中如果没有定义help方法,但是存在对应的User/help.html 模板文件,那么下面的URL访问依然可以正常运作:

http://localhost/myApp/index.php/User/help/

因为系统找不到UserAction类的help方法,会自动定位到User模块的模板目录中查找help.html模板文件,然后直接渲染输出。

例外的情况就是如果定义了路由,则有可能URL的解析规则会被改变,这个我们会在URL路由中详细描述。

如果访问的URL是 http://localhost/App/index.php

在URL里面没有带任何模块和操作的参数,系统就会寻找默认模块DEFAULT_MODULE和默认操作DEFAULT_ACTION,系统默认的默认模块设置是Index模块,默认操作设置是index操作。也就是说:

http://localhost/App/index.php和

http://localhost/App/index.php/Index以及

http://localhost/App/index.php/Index/index 等效。

可以在项目配置文件中修改默认模块和默认操作的名称。

如果我们访问一个不存在的操作或者模块,并且也没有渲染到默认定位的模板文件的话,在调试模式下面会抛出异常错误,在部署模式下则会发送404错误,但是可以通过空模块或者空操作方法引导这些页面到你希望的页面,请参考后面的空模块和空操作。3.1版本开始,增加ACTION_SUFFIX配置参数,用于设置操作方法的后缀。

例如,如果设置:`'ACTION_SUFFIX'=>'Act'`那么访问某个模块的add操作对应读取模块类的操作方法则由原来的add方法变成addAct方法。

[上一页](# "上一页")[下一页](# "下一页")

php 5.2 模块路径,5.2 模块和操作相关推荐

  1. Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决

    Gtk-WARNING**:无法在模块路径中找到主题引擎:"pixmap"的解决 解决以上问题, 只需要安装 gnome-themes-standard 即可 如果终端中提示: ( ...

  2. 系统模块——什么是系统模块、path 路径操作、相对路径VS绝对路径

    系统模块 什么是系统模块 Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块 系统模块fs 文件操作 系统模块path 路 ...

  3. centos查看模块信息和模块路径

    lsmod命令 查看已加载模块使用lsmod命令 modinfo命令 modinfo功能说明:显示kernel模块的信息. 语法:modinfo [-0] [-F field] [modulename ...

  4. Python引用模块和查找模块路径

    这篇文章主要介绍了Python引用模块和Python查找模块路径的相关资料,需要的朋友可以参考下 模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语 ...

  5. python模块搜索原则_详解python模块路径查找规则及定义

    在python中创建一个模块非常简单,只需要在当前目录下创建一个 .py文件即可,系统自动将其解析成模块,文件名就是模块名.很多我们源码时代的同学都认为在查找模块时优先使用当前目录下的自定义模块.其实 ...

  6. Vue中import引入模块路径时的@符号

    Vue中import引入模块路径时的@符号 1.ES6 模块主要有两个功能:export 和 import export:用户对外输出本模块(一个文件可以理解为一个模块,比如 aaa.js bbb.j ...

  7. Gtk-WARNING **: 无法在模块路径中找到主题引擎:“pixmap”(转)

    Gtk-WARNING**:无法在模块路径中找到主题引擎:"pixmap"的解决如果终端中提示:(gvim:2353): Gtk-WARNING **: 无法在模块路径中找到主题引 ...

  8. linux python 永久添加自己的模块路径

    Linux 环境变量配置 : https://blog.csdn.net/freeking101/article/details/81013045 linux python 永久添加自己的模块路径 添 ...

  9. python查询模块路径_Visual Studio 2017中的Python无法通过“搜索路径”查找模块

    我正在尝试将一个带有python虚拟环境的现有python项目添加到visual studio 2017,以便我可以调试它. 该项目还有一些外部依赖项, 所有内容都安排在以下文件夹中 C:\mypro ...

最新文章

  1. Hadoop自学笔记(二)HDFS简单介绍
  2. 【2017级面向对象程序设计】作业一
  3. 20155307 2016-2017第二次《Java程序设计》课堂实践项目
  4. linux 的内核参数优化,linux 内核参数优化
  5. php数组取字段值,php如何获取二维数组指定的某个字段的值
  6. 咕泡-模板方法 template method 设计模式笔记
  7. vue学习之二ECMAScript6标准
  8. 作为一名程序员,我一直为中国的软件产业感到苦恼。
  9. MySql百万数据0秒筛选查询
  10. 通向码农的道路(enet开源翻译计划 二)
  11. gitlab update error
  12. open函数里的newline
  13. 自动驾驶传感器产业链
  14. NB-IOT的基础知识
  15. HDU - 3061 Battle
  16. 运维实践-使用WebP Server Go无缝转换图片为Google的webp格式让你网站访问加载速度飞起来...
  17. 安装资源包后出现的错误信息解决办法
  18. Visio标注、批注位置
  19. 深度学习中关于模型融合问题
  20. 全栈溯源重新定义APM

热门文章

  1. matlab实现移动平均
  2. 数字图像处理——第五章 图像复原与重建
  3. SpringMVC常用Maven POM.xml依赖包片段
  4. 修改IDEA运行jsp文件的时候浏览器地址栏的虚拟访问路径网址
  5. 设置Nginx开机自动启动(centos6.8上亲测可用)
  6. 使用 Trace32 对 FLASH 编程
  7. leetcode-20 有效的括号匹配
  8. 40.多进程同步--锁--多把锁
  9. 01 python爬虫
  10. [linux][c语言]用socket实现简单的服务器客户端交互