概述
使用了很长时间的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