返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >安装运行Hyperf
  • 561
分享到

安装运行Hyperf

php数据库开发语言 2023-09-22 19:09:57 561人浏览 薄情痞子
摘要

安装运行Hyperf 上回讲到,我们对一个普通的 Laravel 框架进行了改造,让它可以在 Swoole 环境下使用,不过其中会有很多问题可能我们一时考虑不到,就会造成程序的稳定性出现问题。那么,今天我们就来学习一个原生的 Swoole

安装运行Hyperf

上回讲到,我们对一个普通的 Laravel 框架进行了改造,让它可以在 Swoole 环境下使用,不过其中会有很多问题可能我们一时考虑不到,就会造成程序的稳定性出现问题。那么,今天我们就来学习一个原生的 Swoole 框架 Hyperf 。

这个框架也是国人开发的,并且还一直比较活跃,同时版本也比较新,目前写这篇文章时是 2.2 版本,需要 Swoole 4.5 以上才可以使用,而 PHP 版本需要大于等于 7.4 以上。

另外需要注意的是,运行这个框架要关闭 Swoole 配置中的 use_shortname ,也就是 php.ini 文件中,设置一下 swoole.use_shortname=0 或者 swoole.use_shortname=off 就可以了。大家也可以先不配置,然后看下在启用 use_shortname 时,运行 Hyperf 框架会报什么错。

安装过程非常简单,直接 composer 安装即可。

composer create-project hyperf/hyperf-skeleton 

安装完了之后,看看目录,是不是就已经感觉和 Laravel 非常像了,怎么用呢?很简单,安装完了就可以在根目录执行下面这个命令行语句。

php bin/hyperf.php start

访问一下 localhost 的 9501 端口吧,我们就能看到 Hyperf 的首页已经输出了一段 JSON 语句。

{"method":"GET","message":"Hello Hyperf."}

恭喜你,安装完成了哦。

PHP8 的过时问题

在我的虚拟机环境中,因为安装的是 PHP8 所以在运行 Hyperf 的时候出现了下面的警告语句。

Deprecated: Return type of Hyperf\Database\Model\Model::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/www/6.框架/hyperf-skeleton/vendor/hyperf/database/src/Model/Model.php on line 1156

这其实是 PHP8 的一个新特性,ReturnTypeWillChange 的意思就是如果你要是实现了一个接口中的方法,那么返回值也要定义成和接口中的方法定义一样的,如果没有定义返回值或者不一样,就会报这种过时警告。其实这不是什么大事,你可以忽略它。如果看得不习惯的话,找到框架中的代码源文件,比如上面的 Hyperf\Database\Model\Model 这个类文件,然后在它的 offsetExists() 方法上加上 #[\ReturnTypeWillChange] 注解,或者给这个 offsetExists() 方法指定返回值就行了。

后面录制视频时,会在本机使用 PHP7 环境,不会出现这个问题。

路由、控制器及视图页面

Hyperf 的路由文件在 config/routes.php 中,可以看到默认首页的路由是这样子的。

Router::addRoute(['GET', 'POST', 'HEAD'], '/', 'App\Controller\IndexController@index');

它指向一个控制器,写法不陌生吧。IndexController 中的内容是这样的。

class IndexController extends AbstractController{    public function index()    {        $user = $this->request->input('user', 'Hyperf');        $method = $this->request->getMethod();​        return [            'method' => $method,            'message' => "Hello {$user}.",        ];    }}

也不陌生吧,注意,这里不要 echo 了哦,你可以 echo 一下试试,同样也是打印在控制台的,它最终输出的内容是需要 return 回去的,就像 Laravel 的 Response 对象一样。不过我们其实已经猜到了,这里的 Return 对象是会最终通过 Swoole 的 Response 对象发送回浏览器的。

我们也可以像 Laravel 那样定义直接操作的回调路由。

Router::get('/test1', function () {    return 'This is Test1';});

当然,我们也可以返回输出视图页面,不过这个要麻烦一点。为什么呢?因为 Hyperf 更倾向于去做后端服务,它的前端输出是需要单独再安装组件的。我们需要安装下面几个组件。

composer require hyperf/viewcomposer require duncan3Dc/bladecomposer require hyperf/task

然后生成一个 view 相关的配置。

php bin/hyperf.php vendor:publish hyperf/view

这时,会在 config/autoload 目录下多出一个 view.php 的配置文件,接着去配置它吧。

return [    'engine' => \Hyperf\View\Engine\BladeEngine::class,  // 使用和 Laravel 一样的 Blade 模板引擎    'mode' => Mode::TASK, // 使用 Task 模式,还需要单独去配置 Task 相关的配置    'config' => [        'view_path' => BASE_PATH . '/storage/view/', // 模板文件路径,不存在自己创建下        'cache_path' => BASE_PATH . '/runtime/view/', // 模板缓存文件路径,不存在自己创建下    ],];

其中,mode 可以选择 Mode::SYNC 和 Mode::TASK 两种模式,SYNC 是同步模式,要使用协程安全的模板引擎,所以官方更推荐使用 TASK 模式,但开启 TASK 模式又需要一些别的配置,主要就是配置一下 config/autoload/server.php 这个配置文件。

// 在 setting 中添加'setting' =>[    // ...    // Task Worker 数量,根据您的服务器配置而配置适当的数量    'task_worker_num' => 8,    // 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况    'task_enable_coroutine' => false,],// 在 callbacks 中添加'callbacks' => [    // Task callbacks    Event::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],    Event::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],]

准备工作好了之后,我们去 storage/view 目录下面新建一个 hello.blade.php 吧。

        Titlehello {{$name}} !

然后定义一个控制器方法去使用这个模板文件并传值。

public function view(RenderInterface $render){    return $render->render('hello', ['name' => 'Zyblog']);}

RenderInterface 对象是通过依赖注入进来的一个模板渲染对象,直接调用它的 render() 方法就可以指定模板和传递参数了,其实和 Laravel 也很像,只是我们要做的准备工作更多一些。

注解定义路由

除了我们上面讲的和 Laravel 一样使用路由文件定义路由之外,我们还可以通过一种注解的方式来定义路由。

新建一个控制器。

namespace App\Controller;use Hyperf\HttpServer\Annotation\Controller;use Hyperf\HttpServer\Annotation\RequestMapping;use Hyperf\HttpServer\Contract\RequestInterface;#[Controller]class AttributesController extends AbstractController{        public function route(RequestInterface $request){        return ['This is Attributes Route Test','params', $request->all()];    }}

注意看哦,在类定义上面,我们使用了一个 PHP8 最新的原生注解。关于 PHP8 的注解功能,可以参考最下方参考链接中的第二条链接,鸟哥有详细的说明。然后在方法上,使用的 @RequestMapping(path="r", methods="get,post") 这种形式,它是 Hyperf 框架提供的注解能力。这两个注释的作用是什么呢?通过它们,我们可以不用去定义 routes.php 了,现在直接就可以通过 /attributes/r 来访问到这个控制器中的 route() 方法了哦,大家现在可以试试啦。

另外,还有一种更简单的路由定义方式,就是自动控制器注解。

class IndexController extends AbstractController{    // ...    public function test2(){        return 'This is auto Test2';    }}

我把这个 AutoController 注解加到了 Index 控制器上,然后新定义了一个 test() 方法,试试用 /index/test2 这个链接来访问一下吧!

其实,注释实现的这一堆功能,很像是多年前那些老框架的实现,就像 tp3.2 时代,控制器中的方法路由就是以控制器类名和方法名来定义的。

命令行脚本

最后,我们再来看一下在 Hyperf 中如何定义运行一个 Command 脚本。这东西在 Laravel 中也很常用,而且它们非常相似。

创建命令行脚本的命令是:

php bin/hyperf.php gen:command TestCommand

运行之后在 app 目录下就会出现一个 Command 目录,里面就有一个 TestCommand.php 文件。

container = $container;        parent::__construct('test:show');//        parent::__construct('demo:command');    }    public function configure()    {        parent::configure();        $this->setDescription('Hyperf Demo Command');    }    public function handle()    {        $this->line('Hello Hyperf!', 'info');    }}

我们就改了一个命令的名称,然后在命令行这样执行它。

php bin/hyperf.php test:show// [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\ReGISterPropertyHandlerListener listener.// [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener listener.// [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener.// Hello Hyperf!

你没看错,Hyperf 的服务启动脚本和命令行启动脚本都是这个 bin/hyperf.php 文件,它还有很多其它的命令配置,后面不加参数就可以看到哦,和 Laravel 的 artisan 非常相似。

总结

今天的内容其实不少,但是经过这一篇的学习,其实我们对 Hyperf 就已经完成入门了。我们学习到了定义普通路由、注解路由,也看到了控制器和命令行的使用。后面我们将继续学习框架中的其它内容,但是,不会像 Laravel 一样进行源码级别的分析,只是简单讲讲使用哦,毕竟这个框架的复杂度又要高了不少。

测试代码:

https://github.com/zhangyue0503/swoole/tree/main/6.框架/hyperf-skeleton

参考文档:

Hyperf

PHP 8新特性之Attributes(注解) - 风雪之隅

来源地址:https://blog.csdn.net/zhanghao143lina/article/details/130526863

--结束END--

本文标题: 安装运行Hyperf

本文链接: https://lsjlt.com/news/415669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 安装运行Hyperf
    安装运行Hyperf 上回讲到,我们对一个普通的 Laravel 框架进行了改造,让它可以在 Swoole 环境下使用,不过其中会有很多问题可能我们一时考虑不到,就会造成程序的稳定性出现问题。那么,今天我们就来学习一个原生的 Swoole ...
    99+
    2023-09-22
    php 数据库 开发语言
  • 【Swoole系列6.3】Hyperf 运行各种网络服务
    Hyperf 运行各种网络服务 简单地运行起普通的 HTTP 服务之后,今天我们再来学习一下如何使用 Hyperf 运行 TCP/UDP 以及 WebSocket 服务。 之前我们通过普通的 Swoole 都已经搭建起过这些服务,其实和...
    99+
    2023-09-12
    java php android spring boot python
  • Docker中安装运行rabbitMQ
    1拉取rabbitmq镜像 docker pull rabbitmq # 默认使用 rabbitmq最新版 1.2、启动容器实例  docker run -d --name rabbitmq -p15672:15672 -p5672:56...
    99+
    2023-10-03
    java-rabbitmq rabbitmq docker 中间件
  • 【PHP】安装及运行thinkphp6
    由于业务需要,最近在学习php8+thinkphp6,需要对thinkphp6进行安装和运行,具体操作如下: 一、安装composter 由于6.0版本必须通过composter方式安装和更新,所以我们首先需要安装composter 在wi...
    99+
    2023-09-14
    php 服务器 学习
  • redis-trib.rb 运行环境安装
    背景:redis-trib.rb是官方的一个运维小工具,还是非常实用的,redis-trib.rb 这个脚本放在源码包的src目标下: redis-trib.rb 要求高版本的ruby,centos 6 默...
    99+
    2024-04-02
  • mysql5.7安装运行的方法
    这篇文章给大家分享的是有关mysql5.7安装运行的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql5.7安装运行的方法:首先将安装包解压到某个目录下,并初始化数据库...
    99+
    2024-04-02
  • Linuxzm 安装运行.AppImage文件
    小编给大家分享一下Linuxzm 安装运行.AppImage文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务...
    99+
    2023-06-10
  • perl安装后如何运行
    要运行Perl脚本,您可以按照以下步骤操作: 打开终端或命令提示符窗口。 输入以下命令来运行Perl脚本: perl 脚本文...
    99+
    2023-10-21
    perl
  • 运行runInstall安装Oracle11g时出错。
    今天准备重新安装一个CentOS6,在安装系统时,使用最小安装,结果有一些包没有安装,其中就有用来测试图形界面的,xeyes,在这种情况下运行runInstall安装Oracle11g时出错,一直提示在/t...
    99+
    2024-04-02
  • windows系统安装php,运行php
    mysql的安装在上一个文章有写 一、安装php 官网:https://windows.php.net/download/ 1.选择电脑64位的,选择第二个而不选择第一个的原因,是第二个与apache搭配的环境,后面再讲到apache的安...
    99+
    2023-09-01
    php 开发语言
  • 在linux下安装并运行scrapyd
    系统:centos7.4 安装scrapyd:pip isntall scrapyd 因为我腾讯云上是python2与python3并存的 所以我执行的命令是:pip3 isntall scrapyd 安装后新建一个配置文件:   sud...
    99+
    2023-01-30
    linux scrapyd
  • Docker安装运行SRS的方法
    这篇文章主要介绍了Docker安装运行SRS的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker安装运行SRS的方法文章都会有所收获,下面我们一起来看看吧。简介SRS 简介SRS定位是运营级的互联网...
    99+
    2023-06-30
  • python安装好了怎么运行
    python 可以在多种平台上运行,运行方式包括:交互式解释器:直接在终端或命令提示符中键入 python 代码执行。python 脚本:创建 .py 文件,在终端或命令提示符中运行。i...
    99+
    2024-04-02
  • Android Studio 3.6安装全过程及AVD安装运行
    1、安装JDK1.7以上版本,Android Studio集成开发环境 (1) 安装并检查JDK1.8,如图1.1所示 图1.1 配置完成的验证 (2) 开始安装Androi...
    99+
    2022-06-06
    Android Studio AVD安装 studio 运行 安装 Android
  • Containerd容器运行yum安装与二进制安装
    目录一、前言二、yum方式安装2.1 下载阿里云镜像源2.2 搜索containerd软件2.3 安装2.4 启动containerd服务2.5 查看服务信息三、二进制方式安装3.1...
    99+
    2024-04-02
  • 无法安装java运行环境jre
    问题:win10系统无法安装java JRE安装包解决方法如下:在win10系统桌面上,开始菜单。右键,运行输入services.msc,再确定(免费学习视频教程分享:java视频教程)在服务中,找到Windows Installer服务右...
    99+
    2022-01-17
    无法安装 java 运行环境 jre
  • 安装运行dedecms的图文详细
    打开网址:http://www.dedecms.com进行下载utf8版本dedecms。 在wampserver文件目录下解压, (解压后为了使用方便将文件夹的名字改为dedecms) 运行wampserver文件目录...
    99+
    2022-06-12
    安装 运行 dedecms
  • docker中怎么安装并运行mysql
    本篇文章给大家分享的是有关docker中怎么安装并运行mysql,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.获取mysql镜像  从...
    99+
    2024-04-02
  • 在docker上如何安装运行mysql
    这篇文章主要讲解了“在docker上如何安装运行mysql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在docker上如何安装运行mysql”吧!ps:实...
    99+
    2024-04-02
  • Node.js怎么安装下载并运行
    这篇文章主要介绍了Node.js怎么安装下载并运行的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node.js怎么安装下载并运行文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作