Vscode创建php项目

1.安装中文插件(可安装可不安装)

在这里插入图片描述

2.安装主题(可安装可不安装)

在这里插入图片描述

3.安装和php相关的插件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.打开文件夹

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.路由操作

查看项目中的route路由
在这里插入图片描述
浏览器中访问think
在这里插入图片描述
隐藏index.php入口文件
在这里插入图片描述
访问ThinkPHP5.1开发手册,复制apache下面的那段话。
在这里插入图片描述
修改伪静态配置
在这里插入图片描述
复制这段话
在这里插入图片描述
在这里插入图片描述
index.php入口文件隐藏成功
在这里插入图片描述

6.修改配置文件

修改app.php
在这里插入图片描述
数据库配置database.php
在这里插入图片描述
在这里插入图片描述

7.删除项目部分内容

删除index,因为一般自己写
在这里插入图片描述
删除route中的路由
在这里插入图片描述

8 版本控制

以后版本升级直接将v1目录复制到v2中,在v2中更改。
在这里插入图片描述

9 全局异常类封装

如果访问错误会出现如下页面(太丑了,要改进)
在这里插入图片描述
因为我们删除了application下面的index,所以我们来生成一个控制器:
按Ctrl+`进入终端
在这里插入图片描述
输入php think make:controller index/Index命令
把index.php里面没用的东西都删除
在这里插入图片描述
在这里插入图片描述
封装一个异常类
在这里插入图片描述

配置自定义异常类
在这里插入图片描述
查看效果:
在这里插入图片描述
在这里插入图片描述

在ExceptionHandler.php同级目录下创建BaseException.php

ExceptionHandler.php里面的代码内容:

<?php
namespace app\lib\exception;use Exception;
use think\exception\Handle;class ExceptionHandler extends Handle
{public $code;public $msg;public $errorCode;public function render(Exception $e){if ($e instanceof BaseException) {$this->code = $e->code;$this->msg = $e->msg;$this->errorCode = $e->errorCode;} else {// debug开启,显示默认的异常if (config('app.app_debug'))return parent::render($e);$this->code = 500;$this->msg = '服务器异常';$this->errorCode = '999';}$res = ['msg' => $this->msg,'errorCode' => $this->errorCode];return json($res, $this->code);}
}

BaseException.php里的代码内容

<?php
namespace app\lib\exception;use Exception;class BaseException extends Exception
{public $code = 400;public $msg = '异常';public $errorCode = 999;public function __construct($params = []){if (!is_array($params))return;if (array_key_exists('code', $params))$this->code = $params['code'];if (array_key_exists('msg', $params))$this->msg = $params['msg'];if (array_key_exists('errorCode', $params))$this->errorCode = $params['errorCode'];}
}

10 全局验证层封装

终端使用命令创建验证类php think make:validate ceshiValidate
在ceshiValidate.php同级下右键单击创建BaseValidate.php,如下图:
在这里插入图片描述
BaseValidate.php内容:

<?php
namespace app\common\validate;use think\Validate;class BaseValidate extends Validate
{public function goCheck($scene = false){// 获取请求传递过来的所有参数$params = request()->param();// 开始验证$check = $scene ? $this->scene($scene)->check($params) : $this->check($params);if (!$check) {TApiException($this->getError(), 10000, 400);}return true;}
}

对于BaseValidate.php中使用到的TApiException方法在common.php中,如下图:
在这里插入图片描述
TApiException方法代码内容如下:

// 异常类输出函数
function TApiException($msg = '异常', $errorCode = 999, $code = 400)
{throw new \app\lib\exception\BaseException(['code' => $code, 'msg' => $msg, 'errorCode' => $errorCode]);
}

其他验证层写法不与BaseValidate.php类似,如UserValidate.php的内容如下,记得继承BaseValidate:

<?phpnamespace app\common\validate;class UserValidate extends BaseValidate
{/*** 定义验证规则* 格式:'字段名'	=>	['规则1','规则2'...]** @var array*/protected $rule = ['phone' => 'require|mobile','code' => 'require|number|length:4|isPefectCode','username' => 'require','password' => 'require|alphaDash',];/*** 定义错误信息* 格式:'字段名.规则名'	=>	'错误信息'** @var array*/protected $message = ['phone.require' => '请填写手机号码','phone.mobile' => '手机号码不合法'];// 配置场景protected $scene = [// 发送验证码'sendCode' => ['phone'],// 手机号登录'phonelogin' => ['phone', 'code'],// 账号密码登录'login' => ['username', 'password'],];
}

11.封装基类控制器

在终端执行命令:php think make:controller BaseController
然后在BaseController.php中写
在这里插入图片描述

<?phpnamespace app\common\controller;use think\Controller;
use think\Request;class BaseController extends Controller
{// api统一返回格式static public function showResCode($msg = '未知', $data = [], $code = 200){$res = ['msg' => $msg,'data' => $data,];return json($res, $code);}// api统一返回格式无数据static public function showResCodeWithOutData($msg = '未知', $code = 200){return self::showResCode($msg, [], $code);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python实战】——神经网络识别手写数字

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

数字图像处理学习笔记(五)

数字图像处理学习笔记&#xff08;五&#xff09; 表示与描述表示链码最小周长多边形的多边形近似&#xff08;MPP&#xff09;标记边界片段骨骼&#xff08;表示平面区域结构形状&#xff09; SIFT原理(尺度不变特征变换匹配算法:Scale-invariant feature transform)SIFT算法分…

有名的爬虫框架 colly 的特性及2个详细采集案例

一. Colly概述 前言&#xff1a;colly 是 Go 实现的比较有名的一款爬虫框架&#xff0c;而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速&#xff0c;设计非常优雅&#xff0c;并且分布式的支持也非常简单&#xff0c;易于扩展。 框架简…

Linux之时间子系统(四): tick 层模块(periodic 和dynamic )

一、时间子系统的软件架构 二、tick 层模块的文件 tick-common.c tick-oneshot.c tick-sched.c tick-broadcast.c tick-broadcast-hrtimer.c 这三个文件属于tick device layer。 tick-common.c文件是periodic tick模块&#xff0c;用于管理周期性tick事件。 tick-oneshot.c文…

ubuntu22.04物理机双系统手动分区

ubuntu22.04物理机双系统手动分区 文章目录 ubuntu22.04物理机双系统手动分区1. EFI系统分区2. 交换分区3. /根分区4. /home分区分区后的信息 手动分区顺序&#xff1a;EFI系统分区(/boot/efi)、交换分区(/swap)、/根分区、/home分区。 具体参数设置&#xff1a; 1. EFI系统分…

OpenHarmony使用智能指针管理动态分配内存对象

概述 智能指针是行为类似指针的类&#xff0c;在模拟指针功能的同时提供增强特性&#xff0c;如针对具有动态分配内存对象的自动内存管理等。 自动内存管理主要是指对超出生命周期的对象正确并自动地释放其内存空间&#xff0c;以避免出现内存泄漏等相关内存问题。智能指针对…

Vue复习

1. MVVM 模型 ● Model&#xff08;模型&#xff09;&#xff1a;表示应用程序中的数据模型。它代表着应用程序中的业务逻辑和状态。 ● View&#xff08;视图&#xff09;&#xff1a;表示应用程序的用户界面。它是用户与应用程序交互的方式。 ● ViewModel&#xff08;视图模…

Docker 安装 Nginx 容器,反向代理

Docker官方镜像https://hub.docker.com/ 寻找Nginx镜像 下载Nginx镜像 docker pull nginx #下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx:xxx #下载指定版本的Nginx镜像 (xxx指具体版本号)检查当前所有Docker下载的镜像 docker…

关于使用TCP-S7协议读写西门子PLC字符串的问题

我们可以使用TCP-S7协议读写西门子PLC&#xff0c; 比如PLC中定义一个String[50] 的地址DB300.20 地址DB300.20 DB块编号为300&#xff0c;偏移量【地址】是30 S7协议是西门子PLC自定义的协议&#xff0c;默认端口102&#xff0c;本质仍然是TCP协议的一种具体实现&#xff…

HMI界面之:医疗设备界面

一、什么是医疗HMI界面 医疗HMI界面是指医疗设备或系统中的人机界面&#xff08;Human-Machine Interface&#xff09;&#xff0c;用于与医疗设备进行交互和操作的界面。它是医疗设备中的重要组成部分&#xff0c;通过图形化、直观化的界面&#xff0c;使医护人员能够方便地控…

短剧APP系统开发:探索短剧的发展机遇,提高收益

近年来&#xff0c;短剧在各大社交平台上快速发展&#xff0c;市场规模大幅度上升&#xff0c;成为了大众闲暇时光的娱乐的首选方式之一&#xff0c;深受大众的喜爱。 与传统的影视相比&#xff0c;短剧时间短、节奏快、剧情爽&#xff0c;让给观众更加容易“上头”。对于创业…

举4例说明Python如何使用正则表达式分割字符串

在Python中&#xff0c;你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法&#xff0c;但它允许你使用正则表达式作为分隔符。 示例 1: 使用单个字符作为分隔符 假设你有一个由逗号分隔的字符串&#xff0c;你可…

力扣:205. 同构字符串

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符…

【Lazy ORM 框架学习】

Gitee 点赞关注不迷路 项目地址 快速入门 模块所属层级描述快照版本正式版本wu-database-lazy-lambdalambda针对不同数据源wu-database-lazy-orm-coreorm 核心orm核心处理wu-database-lazy-sqlsql核心处理成处理sql解析、sql执行、sql映射wu-elasticsearch-starterESESwu-hb…

时间的守护者:无硫手指套的神奇传说

在钟表制造的世界里&#xff0c;有一个神奇的工具被誉为“精工制表良器”——那就是无硫手指套。这并不是一个普通的故事&#xff0c;而是一段讲述质量、技术和关怀的传奇。 很久以前&#xff0c;在一个钟表制造工坊里&#xff0c;技师们为了追求完美&#xff0c;不断地探索着提…

服务器被挖矿了怎么办,实战清退

当我们发现服务器资源大量被占用的时候&#xff0c;疑似中招了怎么办 第一时间重启服务是不行的&#xff0c;这些挖矿木马一定是会伴随着你的重启而自动重启&#xff0c;一定时间内重新霸占你的服务器资源 第一步检查高占用进程 top -c ps -ef 要注意这里%CPU&#xff0c;如果…

Linux操作系统及进程(三)进程优先级及特性

目录 一、优先级概念 二、查看系统进程 三、进程切换 一、优先级概念 1.cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 2.优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。…

pinia的异步以及getter

getter定义 action异步 使用

PyQt:实现菜单栏的点击拖动效果

一、整体步骤 1.设计UI文件 2.调用显示 3.效果展示 二、设计UI文件 1.添加 Scroll Area控件&#xff0c;作为菜单栏的布置区域 2.设置 Scroll Area控件的属性 3.Scroll Area控件内放置 按钮控件 组成菜单栏 此处&#xff0c;放置了需要了6个按钮&#xff0c;并设置按钮的固…