本文主要是介绍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框架实施方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!