模块与操作是 ThinkPHP 中的核心部分,所有的核心逻辑都在这里实现!
ThinkPHP 模块
进入 Myapp\\Lib\\Action 目录,里面有个 IndexAction.class.php 文件。该文件为刚才我们运行入口文件 index.php 时系统自动生成的。打开该文件,其内容大致如下(方法内具体代码省略):
<?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action{ public function index(){ 具体代码略…… } } ?>
该文件已经演示了一个基于 ThinkPHP 的实际应用。
ThinkPHP 控制器
像上面这个 IndexAction.class.php 这样的特殊文件,称为控制器。该类文件通常位于 LibAction 下面,命名方式必须以“模块名+Action.class.php”样式来命名,如 IndexAction.class.php ,详细可参考《ThinkPHP 命名规范》一节。
ThinkPHP 模块
一个控制器对应一个模块。如 IndexAction.class.php 就对应 Index 模块,相应的类名为 IndexAction ,如上面的例子:
class IndexAction extends Action
ThinkPHP 操作
一个模块(类)里有多个方法,称之为“操作”。如上面例子的 index 方法:
public function index()
我们更改上面的 IndexAction.class.php 为:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); echo "第一个例子测试!"; } } ?>
再次访问网站首页(入口文件):
http://localhost/index.php
浏览器显示内容为在 index 操作中输出的:
第一个例子测试!
而不是原来的默认欢迎界面。
增加操作
要增加一个操作,只需在模块里增加一个定义为 public 方法即可。在 IndexAction.class.php 里面新增加一个 test 操作:
public function test(){ header("Content-Type:text/html; charset=utf-8"); echo "这是 test 操作"; }
要访问该操作,浏览器地址为:
http://localhost/index.php/Index/test
浏览器输出如下:
这是 test 操作
可见要访问其他方法,需要在入口文件 URL 地址后面加上“模块/操作”才可以。关于通过入口文件 URL 地址访问模块方法的具体信息,请参看《ThinkPHP URL 访问模式》一节。
同模块调用其他操作
在同一个模块中,一个操作常常要调用其他操作(一般都是私有方法,通常都是独立的能被重复使用的功能模块),由于是在一个模块里(一个类里),因此使用 $this 可以很方便的调用其他操作:
<?php class IndexAction extends Action{ public function index(){ header("Content-Type:text/html; charset=utf-8"); echo "第一个例子测试!"; $this->test(); } } ?>
上面是将前面的 index 操作加上调用 test 操作的例子,运行 index 操作输出如下:
第一个例子测试!这是 test 操作
可见不仅 index 里面的 echo 语句执行了,test 操作里面的 echo 也执行了。这部分是属于 PHP 类与对象的知识,更多请参见PHP基础教程之《PHP 类与对象》一节的内容。
跨模块调用操作的例子,请参见本节《ThinkPHP 跨模块调用操作方法》一文的内容。
小结
- 控制器类文件名为 IndexAction.class.php 这种固定格式,对应 Index 模块,类名为 IndexAction
- 我们自定义的模块里面的类由 ThinkPHP的 基类 Action 继承而来,其遵循 PHP 的类继承属性
- 一个 Web 页面对应一个方法(反之则不一定),且该方法必须定义为 public 类型
- 一个控制器文件里面只能有一个模块可用,但模块(类)可以有多个方法,也可以没有方法