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,一经查实,立即删除!

相关文章

PHP安全技术

文章目录 一、攻击二、输入过滤 一、攻击 万能密码&#xff1a;如 xxx‘or’1该密码拼凑出来的sql语句会直接执行 or’1则满足一切条件解决方法&#xff1a;将用户传过来的密码加密&#xff0c;如md5等万能用户名&#xff1a;如 xxx‘or 1# 该密码拼凑出来的sql语句会直接执行…

P5963 [BalticOI ?] Card 卡牌游戏 贪心

[P5963 BalticOI ?] Card 卡牌游戏【来源请求】 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 贪心模板题。 存在 ( x 1 , y 1 ) (x_1, y_1) (x1​,y1​)&#xff0c; ( x 2 , y 2 ) (x_2, y_2) (x2​,y2​)&#xff0c;假设 x i > y i x_i > y_i xi​>yi​&…

nginx的使用总结

http转https配置&#xff1a; upstream web { ip_hash; server 127.0.0.1:8081; } server { listen 8080; server_name www.example.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; …

【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;以避免出现内存泄漏等相关内存问题。智能指针对…

word文档修改批注字体方法

在最近的一次数据报告中需要增加对数据的批注&#xff0c;发现批注字体大小无法修改&#xff0c;并且发现网上对这个问题的解决方法很少&#xff0c;所以记录下来&#xff0c;方便有缘人学习借鉴。 前置条件&#xff1a;修改批注字体目前在wps中没有找到对应方法&#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…

sed教程_使用sed命令向行尾添加字符(附sed元字符集)

sed教程_使用sed命令向行尾添加字符(附sed元字符集) sed 是一项 Linux 指令, 功能同 awk 类似, 差别在于, sed 简单, 对列处理的功能要差一些, awk 的功能复杂, 对列处理的功能比较强大。 sed 元字符集: ^ 锚定行的开始, 如: /^sed/ 匹配所有以 sed 开头的行。$ 锚定行的结束…

HMI界面之:医疗设备界面

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

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

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

[leetcode] 994. 腐烂的橘子

在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…

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

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

力扣:205. 同构字符串

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