🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 模块和操作 [上一页](33.html "上一页")[下一页](35.html "下一页") 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方法。 [上一页](33.html "上一页")[下一页](35.html "下一页")