ThinkPHP 8高效构建Web应用-控制器
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
控制器无须特殊定义,通常存放在app/controller目录下,文件名采用驼峰命名,不强制要求继承任何内置基础类,非常灵活。但是在实际应用开发中,笔者建议还是根据接口职责来划分控制器。
【示例6-1】
新建app/controller/User.php文件,代码如下:
<?php
// app/controller/User.php
namespace app\controller;
class User
{
public function login()
{
return 'login';
}
}
在上面的示例中定义了一个User控制器,当用户访问http://localhost:8000/user/login或者http://localhost:8000/index.php/user/login时,就会执行User控制器中的login方法后返回login字符串。
1. 控制器后缀名
在某些场景下,控制器名称可能和模型名称冲突,比如已经有一个User的模型类,而控制器名称也为User,那么就会产生冲突,此时我们可以打开config目录下route.php中的控制器名称后缀开关。
'controller_suffix' => true,
启用控制器后缀后,控制器名称后面就会带有Controller后缀,例如上面的用户控制器中的User就可以修改为UserController。
【示例6-2】
新建app/controller/UserController.php文件,代码如下:
<?php
namespace app\controller;
class UserController
{
public function login()
{
return 'login';
}
}
在浏览器中访问http://localhost:8000/user/login,输出login字符串。测试完这个示例后,需要将route.php中的控制器名称后缀开关controller_suffix重新设置为false,恢复原来的配置。
2. 嵌套控制器
控制器支持嵌套,我们可以根据业务需求,在app/controller目录下创建包含子目录的控制器。下面列举查看用户订单的示例。
【示例6-3】
新建app/controller/user/Order.php文件,代码如下:
<?php
namespace app\controller;
class Order
{
public function list()
{
return 'list';
}
}
在浏览器中访问http://localhost:8000/user.order/list时,就会执行Order控制器的list方法,输出list字符串。通过多级控制器可以更灵活地支持代码划分和更优雅的URL。
3. 控制器基类
ThinkPHP 8内置了一个控制器基类,提供了许多基础上下文变量,比如App实例和当前Request实例。下面列举一个读取应用时区配置和当前请求URL的示例。
【示例6-4】
新建app/controller/Index.php文件,代码如下:
<?php
// 控制器
namespace app\controller;
use app\BaseController;
class Index extends BaseController
{
public function index()
{
$host = $this->app->config->get('app.default_timezone');
$url = $this->request->url();
return json(['host' => $host, 'url' => $url]);
}
}
在浏览器中访问http://localhost:8000,输出结果如下:
{
"host": "Asia/Shanghai",
"url": "/"
}
读者把环境一搭,很容易学会ThinkPHP8控制器的使用。