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

相关文章

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

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