当前位置: 首页 > article >正文

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控制器的使用。


http://www.kler.cn/a/466717.html

相关文章:

  • 深入理解Java面向对象:类与对象、匿名对象、成员变量与局部变量
  • Spring AOP原理详解-Spring官方原版
  • 【服务器项目部署】✈️将本地项目部署到服务器(二)!
  • 【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
  • python:多线程 简单示例
  • 【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
  • df.groupby()方法使用在查询中用到的筛选条件函数对 数据进行分组
  • Python基于Gradio可视化部署机器学习应用
  • Redis--内存管理(过期删除和内存淘汰策略)
  • 机器学习笔记 - 单幅图像深度估计的最新技术
  • python对mongodb的增删查改
  • 半导体材料-制造材料
  • 分布式锁常见实现方案总结
  • 数据库进阶教程之DDL语句(万字详解)
  • 使用 Docker 查看 Elasticsearch 错误日志
  • OpenCV相机标定与3D重建(41)从 3D 物点和它们对应的 2D 图像点估算初始相机内参矩阵函数initCameraMatrix2D()的使用
  • MySQL8安装与卸载
  • 跳转至系统设置下某个子模块 - 鸿蒙 Harmony
  • 使用Python实现实时视频处理与分析:解锁计算机视觉的无限可能
  • Go语言中的逃逸分析:深入浅出
  • [网络安全] DVWA之 Weak Session IDs -弱会话- 攻击姿势及解题详析合集
  • 外观模式详解
  • 大模型推理的极限:理论分析、数学建模与 CPU/GPU 实测
  • 计算机网络面试常见知识框架以及常见面试题解
  • 【数据结构-单调队列】力扣LCR 184. 设计自助结算系统
  • 24年收尾之作------动态规划<六> 子序列问题(含对应LeetcodeOJ题)