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

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.lryc.cn/news/623827.html

相关文章:

  • 7.Ansible自动化之-实施任务控制
  • 最优化:建模、算法与理论|02 Optimization Modeling and Typical Examples(1)
  • [优选算法专题二滑动窗口——将x减到0的最小操作数]
  • 【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决用一段时间就提示升级的问题
  • Shell脚本-for循环语法结构
  • 【前端基础】19、CSS的flex布局
  • 蓝凌EKP产品:JSP 性能优化和 JSTL/EL要点检查列表
  • rt-thread audio框架移植stm32 adc+dac,用wavplayer录音和播放
  • 【从零开始学习Redis】项目实战-黑马点评D2
  • scikit-learn/sklearn学习|多任务套索回归MultiTaskLasso解读
  • Windows_Server软件定义网络架构
  • 【Linux系列】如何在 Linux 服务器上快速获取公网
  • 每日两道算法题:DAY3
  • uniappx 安卓端本地打包的一些总结
  • 【位运算】查询子数组最大异或值|2693
  • CNV检测--单细胞空间vs基因组WGS/WES
  • AutoSar BSW介绍
  • 《Nursing Research》(护理 SCI)LaTeX 模板详细教程:从入门到投稿(二)
  • http工作流程
  • 数据电台询价的询价要求
  • 数据链路层(1)
  • FX10/20 (CYUSB401X)开发笔记5 固件架构
  • 基于Netty的高并发WebSocket连接管理与性能优化实践指南
  • prototype 和 _ _ proto _ _的关联
  • multiboot 规范实践分析
  • 交叉编译 手动安装 SQLite 库 移植ARM
  • Python数据分析案例82——基于机器学习的航空公司满意度分析
  • 攻防世界—unseping(反序列化)
  • pytorch线性回归
  • (一)React企业级后台(Axios/localstorage封装/动态侧边栏)