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

相关文章

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。