lumen切换hyperf框架实施方案

2023-10-05 14:59

本文主要是介绍lumen切换hyperf框架实施方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

public下index.php 与bin 下hyperf.Php   在默认的情况下,是由入口文件来加载 config/container.php 来实现的

Lumen的解析请求和响应都在入口public下面的index.php中$app->run()里面进行,大致分下面4个步骤:

1加载前置中间件  2匹配路由   3返回接口  4加载后置中间件

Hyperf  项目根目录配置为当前目录的安装目录根目录,即不存在public目录,启动 bin/hyperf.php  

1.PHP ini 设置, 按需设置即可, 比如这里还可以设置时区

2.常量 BASE_PATH, hyperf 只设置了这个一个常量, 用来所有 路径 相关的场景

3.config/container.php, container 的初始化, 重中之重的内容

4.Application->run(), 完整的是 Symfony\Component\Console\Application, 用来跑 cli 应用、

在执行 php bin/hyperf.php start 后,将由 Hyperf\Server\Command\StartServer 命令类接管,并根据配置文件 config/autoload/server.php 内定义的 Server 逐个启动。

关于依赖注入容器的初始化工作,我们并没有由组件来实现,因为一旦交由组件来实现,这个耦合就会非常的明显,所以在默认的情况下,是由入口文件来加载 config/container.php 来实现的。

/ hyperf 生命周期: container application swoole http coroutine

hyperf配置文件全部存放在 config\config.php、和 config\autoload 文件夹.

通过配置文件定义路由

路由的文件位于 hyperf-skeleton 项目的 config/routes.php ,下面是一些常用的用法示例。

lumen 框架 $router->group  , $router->get, $router->post

hyperf框架 Router::addRoute, Router::get,  Router::post

控制器 使用

快捷创建命令

php bin/hyperf.php gen:Controller SettlementControllers/SettlementPageController

App\Controller\SettlementControllers\SettlementPageController created successfully.

模型使用  创建模型

Hyperf 提供了创建模型的命令,您可以很方便的根据数据表创建对应模型。命令通过 AST 生成模型,所以当您增加了某些方法后,也可以使用脚本方便的重置模型。1.0.* 版本:

$ php bin/hyperf.php gen:model table_name

 

中间件

中间件主要用于编织从 请求(Request) 到 响应(Response) 的整个流程

生成中间件

php bin/hyperf.php gen:middleware Auth/FooMiddleware

App\Middleware\Auth\FooMiddleware created successfully.

全局中间件

全局中间件只可通过配置文件的方式来配置,配置文件位于 config/autoload/middlewares.php ,配置如下:

局部中间件

局部中间件可以通过配置文件或者注解定义

use App\Middleware\FooMiddleware;

use Hyperf\HttpServer\Router\Router;

// 每个路由定义方法都可接收一个 $options 参数

Router::get('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::post('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::put('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::patch('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::delete('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::head('/', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

Router::addRoute(['GET', 'POST', 'HEAD'], '/index', [\App\Controller\IndexController::class, 'index'], ['middleware' => [ForMiddleware::class]]);

// 该 Group 下的所有路由都将应用配置的中间件

Router::addGroup(

   '/v2', function () {

       Router::get('/index', [\App\Controller\IndexController::class, 'index']);

   },

   ['middleware' => [ForMiddleware::class]]

);

 

Hyperf框架 - 事件机制

事件机制包含三个角色。

事件Event

定义一个类,一般需要存储一些源数据,因此事件对象应该采用短生命周期的写法,即使用 new UserRegisterd($userId) 的写法。

调度器Dispatcher

触发事件,一般需要传递源数据到事件对象里,并且使该事件的所有监听者去做相应的处理。

监听器Listenner

调度器会将事件对象传递到监听器,监听器得到事件并做相应的处理。由于对象的传递是引用传递,且监听器是串行执行的,所以在监听器里面可以改变事件对象的数据,以传递到下一个监听器继续处理,一个事件可以被多个监听器监听,一个监听器可以监听多个事件,可以设置监听器的执行先后顺序。

注册监听器到配置文件

排在前面的监听器先被执行。

config/autoload/listeners.php

Event/AddGoodsRedisEvent

Listener/AddGo

odsRedisListener

Controller/GoodsController

use App\Event\AddGoodsRedisEvent;

use Psr\EventDispatcher\EventDispatcherInterface;

// 商品id添加到redis

$this->eventDispatcher->dispatch((new AddGoodsRedisEvent($data['goods_id'])));

验证器

hyperf/validation 衍生于 illuminate/validation,我们对它进行了一些改造,但保持了验证规则的相同。在这里感谢一下 Laravel 开发组,实现了如此强大好用的验证器组件。

引入组件包 composer require hyperf/validationrequire hyperf/validation

异常

1. 自己定义异常类 BusinessException

2.定义异常处理器HttpExceptionHandler

3.注册异常处理器

4.抛出异常 完成上面两步,就可以在业务逻辑中,抛出对应异常

1定义异常类 app/Exception/BusinessException.php

namespace App\Exception;

use App\Constants\ErrorCode;

use Hyperf\Server\Exception\ServerException;

us

这篇关于lumen切换hyperf框架实施方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/151444

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea