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

ThinkPHP8学习篇(三):控制器

ThinkPHP 支持传统的 MVC(Model-View-Controller)模式以及流行的 MVVM(Model-View-ViewModel)模式的应用开发,在请求流程中,控制器扮演着承上启下的核心角色 —— 它承接路由分发的请求,调度模型进行数据处理,协调视图完成最终渲染,是业务逻辑处理的中枢枢纽。本篇文章将记录 ThinkPHP 控制器的学习过程。


一、控制器定义

按照ThinkPHP的架构设计,所有的URL请求(无论是否采用了路由),最终都会定位到控制器。控制器的层可能有很多,为了便于区分就把通过URL访问的控制器称之为访问控制器(通常意义上我们所说的控制器就是指访问控制器)。ThinkPHP 的控制器定义比较灵活,可以无需继承任何的基础类,也或者根据业务需求封装自己的基础控制器类。

控制器文件默认放在 app\controller 目录下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。如果要更改控制器文件所在目录,需要在 config\route.php 配置文件中进行设置:

// 访问控制器层名称,可以更改为你需要的目录名称,默认为 controller
'controller_layer'    =>    'controller',

单应用模式控制器类的定义如下:

<?php
namespace app\controller;class UserController
{public function login(){return 'login';}
}

控制器类文件的实际位置为 app\controller\UserController.php

该类在没有定义路由的情况下也是可以访问的,访问的URL地址是:

http://servername/usercontroller/login
或者
http://servername/user_controller/login

可以看出,如果没有定义路由,访问的方式就是 类名/方法名

1、渲染输出

控制器的输出默认全部采用 return 的方式,无需进行任何的手动输出,系统会自动完成渲染内容的输出。

下面我们来看一些常见的输出方式:

<?php
namespace app\index\controller;class Index
{public function hello(){// 直接输出字符串内容return 'hello,world!';}public function json(){// 输出JSONreturn json($data);}public function read(){// 渲染默认模板输出return view();}
}

控制器一般不需要任何输出,直接 return 就可以了。并且控制器在 json 请求时会自动转换为 json 格式输出。

二、基础控制器

默认安装后,ThinkPHP为我们提供了一个 app\BaseController 基础控制器类,官方建议我们在定义自己的控制器类时继承该类。当然,我们也可以对该基础控制器类进行修改。

基础控制器的位置可以随意放置,只需要注意更改命名空间即可。

基础控制器仅仅提供了控制器验证功能,并注入了 think\Appthink\Request 对象,因此可以直接在控制器中使用 app 和 request 属性调用 think\App 和 think\Request 对象实例。

示例

namespace app\controller;use app\BaseController;class Index extends BaseController
{public function index(){// 继承 BaseController 后,就可以在方法中直接使用 app 和 request 属性$action = $this->request->action();$path = $this->app->getBasePath();}
}

三、空控制器

空控制器从名字上看,应该是什么都不做的控制器,但实际上不是这样的。空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位当前应用下的空控制器(Error)类,利用这个机制我们可以用来定制错误页面和进行URL的优化。与其叫做空控制器,倒不如说是404更合适。

示例

<?php
namespace app\controller;class Error 
{public function __call($method, $args){return 'error request!';}
}

四、资源控制器

资源控制器可以轻松创建 RESTFul 资源控制器,可以通过命令行生成需要的资源控制器,语法:

php think make:controller <资源控制器名称>

示例 创建 Blog 资源控制器

php think make:controller Blog

生成的资源控制器文件会自动放到 app\controller 目录下。

然后只需要为资源控制器注册一个资源路由:

Route::resource('blog', 'Blog');

设置后会自动注册7个路由规则,对应资源控制器的7个方法。

http://www.xdnf.cn/news/17983.html

相关文章:

  • 《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》
  • pair之于vector、queue(vector<pair<int,int>>)
  • Yolov模型的演变
  • K8S集群环境搭建
  • 【LeetCode 热题 100】(八)二叉树
  • 数据结构——栈和队列oj练习
  • 深度解析 Spring Bean 生命周期
  • 【网络安全】Webshell的绕过——绕过动态检测引擎WAF-缓存绕过(Hash碰撞)
  • 《P4180 [BJWC2010] 严格次小生成树》
  • MySQL 插入数据提示字段超出范围?一招解决 DECIMAL 类型踩坑
  • 安卓11 12系统修改定制化_____修改运营商版本安装特定应用时的默认规则
  • 机器学习相关算法:回溯算法 贪心算法 回归算法(线性回归) 算法超参数 多项式时间 朴素贝叶斯分类算法
  • 一文速通Python并行计算:14 Python异步编程-协程的管理和调度
  • C语言:文件操作详解
  • 后量子密码算法SLH-DSA介绍及开源代码实现
  • Java8~Java21重要新特性
  • C++ 最短路Dijkstra
  • CodeBuddy IDE深度体验:AI驱动的全栈开发新时代
  • Maven下载和配置-IDEA使用
  • 【算法】——力扣hot100常用算法技巧
  • 使用IntersectionObserver实现页面右侧运营位区域固定,和页面列表数据分页加载
  • JetPack系列教程(七):Palette——让你的APP色彩“飞”起来!
  • 【大语言模型 02】多头注意力深度剖析:为什么需要多个头
  • 后量子密码算法ML-DSA介绍及开源代码实现
  • 【DL学习笔记】常用数据集总结
  • 微服务架构实战指南:从单体应用到云原生的蜕变之路
  • 56. 合并区间
  • 【Java基础面试题】数据类型
  • PAT乙级_1085 PAT单位排行_Python_AC解法_含疑难点
  • C语言(11)—— 数组(超绝详细总结)