lnmp - tp6.0的安装和简单使用

news2024/9/20 20:43:56

概述

使用了很长时间的Mac M2芯片的电脑在之前使用虚拟机之前总有一些bug不是那么好用,周末之余重新安装了一下centos虚拟机,搭建了lnmp环境,打算自己挤时间,做一点应用,作为一次新的小小的尝试。

安装&更新

centos 虚拟机安装

去centos官网下载安装包,https://www.centos.org/download/ 选择 ARM64 (aarch64)这个版本不会影响lnmp的安装,安装之前我一直想的会不会因为版本太高而导致不好用,非常丝滑,不用担心。

在这里插入图片描述

在开发的过程中有个选项需要注意,左侧选择server,右侧选择所需要的插件和兼容程序,其中需要注意的是windows兼容程序、开发工具、unix兼容程序、桌面等等,根据自己的需要选择。

#开发环境:
php 7.4.33
mysql 5.7
nginx 1.26

tp6.0+ 项目的初始化

# 创建
composer create-project topthink/think 你的应用名称
# 更新
composer update topthink/framework

在启动的时候,会遇见一个小小的问题,去php.ini配置文件中去找disable_functions注释掉下面的三个函数proc_get_status、proc_open、passthru,php配置文件的路径可能不一样,可以使用命令 php -i | grep php.ini去搜索。

在这里插入图片描述

proc_get_status() 函数用于获取通过 proc_open() 函数打开的进程的信息。这个函数返回一个关联数组,其中包含了关于该进程的各种状态信息,如进程ID、是否还在运行、输入/输出流的状态等。这些信息对于监控和管理通过PHP执行的进程非常有用。

出于函数都是出于安全原因,以上函数在某些环境中可能被禁用。

#thinkphp6.0 启动命令
php think run -p 80

tp6.0+ 多应用模式

设计初衷,在开发的过程中有很多痛点,比如数据模型的不规范调用,返回数据格式的不统一,所以设计初衷使用4层设计、使用前后端分离采用Api Json数据交互的方式来进行交互和处理。

Controller 针对不同的客户端请求,web(PC)、admin(后台管理),暂时只有这两个客户端的需求,把所有的业务逻辑涉及到的统一封装在Service业务逻辑层,第三方基础库统一放在Library下。

tp6.0使用composer方式来安装多应用插件,安装多应用命令 composer require topthink/think-multi-app

模型、错误处理、中间件

对Tp6.0框架中模型、错误处理、中间件,先做一个简单的使用,有助于了解和帮助后面更好的开发。

模型

Mysql的引入最为方便和便捷、在app中选择一个目录,新建一个PHP文件,定义好命名空间,$pk是定义的主键key,$table是表名,Mysql的配置在根目录.env下设置,代码如下:

namespace app\common\model;

use think\Model;
class Manage_Admin extends Model{
    protected $pk = 'admin_id';
    protected $table = 'manage_admin';

    public function getAdminDetailsById($admin_id): array
    {
        if(empty($admin_id)){
            return [];
        }
        return $this->where('admin_id',$admin_id)->find()->toArray();
    }
}
错误处理

多应用下的错误处理有一点不同,需要把对应的映射关系文件放置在自己的目录下,新建名为provider.php的文件,添加对应的映射关系,代码如下:

use app\admin\exception\Http;
return [
    'think\exception\Handle' => Http::class,
];

http文件代码,如下:

namespace app\admin\exception;

use think\exception\Handle;
use think\Response;
use Throwable;

class Http extends Handle {
    private int $statusCode = 500;
    public function render($request, Throwable $e): Response
    {
        if(method_exists($e, 'getStatusCode')){
            $httpStatusCode = $e->getStatusCode();
        }else{
            $httpStatusCode = $this->statusCode;
        }
        return show($httpStatusCode, $e->getMessage());
    }
}
中间件

中间件是一个非常常用的插件,对公共的请求做一些拦截,参数验证等等,先简单实现一下这里的配置和demo,同理,应用下先放置配置文件,代码如下:

return [
    app\admin\middleware\Check::class,
];

Check映射文件代码,如下:

namespace app\admin\middleware;
use think\Response;

class Check {
    public function handle($request, \Closure $next){
        return $next($request);
    }

    /**
     * 中间件结束调度
     * @param Response $res
     * @return void
     */
    public function end(Response $res){
    }
}

最后我的app目录的树是这样的,如下:

├── app
│   ├── admin
│   │   ├── controller
│   │   ├── exception
│   │   └── provider.php
│   ├── AppService.php
│   ├── BaseController.php
│   ├── common
│   │   ├── library
│   │   ├── model
│   │   └── service
│   ├── common.php
│   ├── event.php
│   ├── ExceptionHandle.php
│   ├── middleware.php
│   ├── provider.php
│   ├── Request.php
│   └── service.php

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

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

相关文章

HTML5好看的花店商城源码3

文章目录 1.设计来源1.1 主界面1.2 登录界面1.3 注册界面1.4 商品列表界面1.5 商品详细界面1.6 购物车界面1.7 团队介绍界面1.8 关于我们界面1.9 其他界面效果汇总 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在…

设计模式 —— 单例模式

文章目录 一、单例模式1.1 单例模式定义1.2 单例模式的优点1.3 单例模式的缺点1.4 单例模式的使用场景 二、普通案例2.1 饿汉式单例模式(Eager Initialization Singleton)2.2 懒汉式单例模式(Lazy Initialization Singleton) 参考资料 本文源代码地址为 java-demos/singeleton-…

西柚云 Rstudio Server 使用教程

在生物信息学的研究中,R语言与RStudio的搭配如同汽车与引擎,是科研工作的强力组合。不过,除了在个人电脑上传统使用的方式,还有没有更简便、更高效的选择呢? RStudio Server Cloud —— 云端的RStudio体验 快速切换多…

【408DS算法题】036基础-14年真题_求二叉树的WPL

Index 真题题目分析实现总结 真题题目 二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T ,采用二叉链表存储, 结点结构如下: 其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针, 请…

贪心算法求无序数组最大递增序列

给定一个无序的数组&#xff0c;获取其最大的递增序列。下面使用贪心算法实现&#xff1a; 1、算法实现 void max_seq(int* arr,int len) {/// 标记递增序列的开始位置int start 0;/// 记录最大的递增序列数int max 0;int i 1;for( ; i<len; i){/// 如果当前元素大于…

【计算机组成原理】你知道什么是8421码、什么是余3码什么又是2421码吗?今天这篇文章带你认识计算机中的BCD码

BCD码 导读一、编码1.1 什么是编码&#xff1f;1.2 编码机制ASCII码非ASCII编码Unicode 二、 BCD码2.1 8421码小结 2.2 余3码2.3 2421码2.4 总结 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了不同的进位…

github中action作用和讲解

1&#xff0c;简介 GitHub Actions 是 GitHub 的一个自动化功能&#xff0c;它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务&#xff0c;比如&#xff1a; 自动测试&#xff1a;每当代码被推送到仓库时&#xff0c;自动运行测试…

学生公寓单相费控电表的规格如何选择

石家庄光大远通电气有限公司学生公寓单相费控电表功能支持时间管理控制。L1、L2、L3可分别设置为工作日和节假日模式&#xff0c;每天多可设置8个时间段&#xff0c;每个时间段可分别设置为合闸状态或夜间模式&#xff0c;合闸时间段内电表保持合闸&#xff0c;夜间时间段内&am…

手机玩机常识-----小米系列机型 Android 15 更新计划 那些机型将会更新安卓15

小米机型是很多米粉最喜欢把玩的&#xff0c;其中解锁bl root 刷写twrp以及刷第三方系统资源相对其他品牌机型来说比较丰富。目前安卓15快要更新到很多机型。我们来了解下小米系列机型的更新计划是咋样的 小米会定期更新有关 Redmi红米 设备的支持日期的数据&#xff0c;包括可…

如何使用Spoon连接data-integration-server并在服务器上执行转换

1.建立连接 2.新建转换或任务 3.右键[子服务器]&#xff0c;新建一个服务器连接(data-integration-server服务器的连接信息) 4.右键[Run configurations],新建一个执行连接,勾选相应的选项即可: 5.选择服务器运行即可! 6.最后&#xff0c;你可以通过服务器端的WEB查看执行日志…

Kafka【八】如何保证消息发送的可靠性、重复性、有序性

【1】消息发送的可靠性保证 对于生产者发送的数据&#xff0c;我们有的时候是不关心数据是否已经发送成功的&#xff0c;我们只要发送就可以了。在这种场景中&#xff0c;消息可能会因为某些故障或问题导致丢失&#xff0c;我们将这种情况称之为消息不可靠。虽然消息数据可能会…

zoom缩放导致下拉框定位偏移问题

因为浏览器升级修改了zoom导致 https://developer.chrome.google.cn/release-notes/128?hlzh_tw 可根据zoom值计算相差偏移量 const isChromeHighVersion () > {const ua navigator.userAgent.toLowerCase();const chromeIndex ua.indexOf(chrome);if (chromeIndex >…

跑步戴的耳机哪个品牌的好?精选五款热门品牌骨传导耳机分享

近年来&#xff0c;骨传导耳机逐渐成为了人们喜爱的耳机之一。相比于传统的耳机&#xff0c;骨传导耳机不需要使用耳塞&#xff0c;就可以让用户在运动时更加自由自在&#xff0c;不受耳机带来的束缚感。然而&#xff0c;市面上的骨传导耳机品牌和型号众多&#xff0c;质量参差…

如何把大的txt文件拆分为小的文件?

命令&#xff1a;split 1. 功能&#xff1a;这个是一个Linux 命令&#xff0c;功能是一个大文件分割成多个较小的文件。 可以使用该命令的系统&#xff1a;在Linux 终端&#xff0c;或者是windows git bash 端口。 官方说明&#xff1a;在Linux 终端&#xff0c;或者是…

【生成模型系列(中级)】词向量维度选择的奥秘——从理论到实验的揭秘【通俗理解,代码模拟】

【通俗理解】词向量维度选择的奥秘——从理论到实验的揭秘 关键词提炼 #词向量 #维度选择 #最小熵原理 #Johnson-Lindenstrauss引理 #注意力机制 #图网络 第一节&#xff1a;词向量维度选择的类比与核心概念【尽可能通俗】 1.1 词向量维度选择的类比 词向量维度选择就像为一…

Git 使用指南 --- 版本管理

序言 Git 是一个开源的 分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。对一个程序员来说&#xff0c;掌握 Git 的使用是必要的。  在这个系列中&#xff0c;将详细的介绍 Git 的使用和原理&#xff0c;话不多说&#xff0c;让我们开始吧。…

C# 加解密之DES

说完了对称加密中的AES&#xff0c;这一篇再来介绍下DES。加解密原理什么的就不介绍了&#xff0c;大家可以自行百度&#xff08;主要我也不太明白&#xff0c;也不需要太明白&#xff09;&#xff0c;大致说一下两者的区别吧&#xff01; 首先肯定是加密算法的不同&#xff0…

模型大师们!答应我把这8本书翻烂好嘛?

模型大师们&#xff0c;准备好踏上一段深度学习与模型构建的路了吗&#xff1f; 这里有八本经典之作&#xff0c;它们将是你攀登知识高峰的阶梯! 从《PyTorch深度学习实战》到《大模型时代》 从掌握基础框架到洞悉大模型时代的变革 模型大师&#xff0c;准备好了吗&#xff…

RabbitMQ核心架构

RabbitMQ架构设计 Producer&#xff1a;负责产生消息。 Connection&#xff1a;RabbitMQ客户端和代理服务器之间的TCP连接。 Channel&#xff1a;建立在连接之上的虚拟连接&#xff0c;RabbitMQ操作都是在信道中进行。 Broker&#xff1a;一个Broker可以看做一个RabbitMQ服…

TP5发送邮件功能如何实现?怎么配置服务?

TP5发送邮件性能优化如何优化&#xff1f;怎么使用TP5发送邮件&#xff1f; 在现代Web开发中&#xff0c;TP5框架因其高效和灵活性而广受欢迎。无论是用于用户注册验证、密码重置还是定期通知&#xff0c;TP5发送邮件功能都能提供强大的支持。AokSend将详细介绍如何在TP5框架中…