天天看点

初试hyperf

一、安装要求

PHP >= 7.3

Swoole PHP 扩展 >= 4.5,并关闭了 Short Name

OpenSSL PHP 扩展

JSON PHP 扩展

PDO PHP 扩展 (如需要使用到 MySQL 客户端)

Redis PHP 扩展 (如需要使用到 Redis 客户端)

Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)

二、通过composer安装

composer create-project hyperf/hyperf-skeleton
           

三、目录结构

bin          执行hyperf启动脚本
app          控制器、异常、监听器、模型
config       配置文件
runtime      运行时产生的文件
           

四、配置路由

配置路由的方式有两种方式

第一种:/config/routes.php 中进行配置。

第二种:使用注解进行配置,这里博主采用注解方式进行配置。

在/app/controller/目录下创建控制器InfoController.php,并填写如下代码

<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;

/**
 * @AutoController()
 */
class InfoController extends AbstractController
{
    public function index(){
        return ['name'=>"hyperf"];
    }
}


/**
* 这里就不要复制了!!!!!!
* @AutoController 为绝大多数简单的访问场景提供路由绑定支持,使用 @AutoController 时则 Hyperf 会自动解析所在类*
* 的所有 public 方法并提供 GET 和 POST 两种请求方式。
* 使用 @AutoController 注解时需 use Hyperf\HttpServer\Annotation\AutoController; 命名空间; 
*/
           

驼峰命名的控制器,会自动转化为蛇形路由,以下为控制器与实际路由的对应关系示例:

控制器 注解 访问路由

控制器 注解 访问路由
MyDataController @AutoController() /my_data/index
MyDataController @AutoController() /mydata/index
MyDataController @AutoController(prefix="/data") /data/index

五、启动服务

在根目录下运行 php bin/hyperf.php ,访问 http://127.0.0.1:9501/info/index 即可(127.0.0.1修改成你自己的ip地址)

六、链接数据库

1、在根目录,找到.env 文件,修改数据库连接信息

DB_DRIVER=mysql
DB_HOST=192.168.37.128    //数据库地址
DB_PORT=3306                     //端口
DB_DATABASE=demo          //数据库名称
DB_USERNAME=root         //账户
DB_PASSWORD=root       //密码
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
DB_PREFIX=                 //表前缀
           

2、打开控制器添加如下代码

注意:使用Db::table的时候一定要导入 use Hyperf\DbConnection\Db;
注意:使用Db::table的时候一定要导入 use Hyperf\DbConnection\Db;
注意:使用Db::table的时候一定要导入 use Hyperf\DbConnection\Db;

$row = Db::table('user')->first();    //查询一条

$users = Db::select('SELECT * FROM user;');  //查询所有

$id = Db::table('user')->value('id');   //获取单个值

$users = Db::table('user')->where([
    ['status', '=', '1'],
    ['gender', '=', '1'],
])->get(); //按条件查询
           

更多查询方式可参考 官网:https://hyperf.wiki/2.1/#/zh-cn/db/quick-start

七、视图

1、安装视图组件:composer require hyperf/view:~2.0.0 //博主使用的是hyperf 2.0.0版本的,所有安装其他组件也要和hyperf版本一致,否则无法安装成功!!!!!!

2、跟目录执行如下命令,会在/config/autoload下生成view配置文件

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

3、安装task

composer require hyperf/task:~2.0.0
           

4、配置静态资源和task

打开/config/autoload/server.php,添加如下代码

'settings' => [
		...其他配置不用修改
		
        // Task Worker 数量,根据您的服务器配置而配置适当的数量
        'task_worker_num' => 8,
        // 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况
        'task_enable_coroutine' => false,
        // 静态资源
        'document_root' => BASE_PATH . '/public',
        'enable_static_handler' => true,
],
'callbacks' => [
        SwooleEvent::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'],
        SwooleEvent::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'],
        SwooleEvent::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'],
        SwooleEvent::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],
        SwooleEvent::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],
    ],
           

5、安装模板引擎,博主已ThinkTemplate(thinkphp) 引擎为例

composer require sy-records/think-template
           

安装完成后打开 /config/autoload/view.php,将 “engine”的值修改为ThinkEngine::class

use Hyperf\View\Engine\ThinkEngine;
use Hyperf\View\Mode;

return [
    'engine' => ThinkEngine::class,
    'mode' => Mode::SYNC,
    'config' => [
        'view_path' => BASE_PATH . '/storage/view/',             //模板存放路径
        'cache_path' => BASE_PATH . '/runtime/view/',
    ],
];
           

在根目录创建 /storage/view/index.html文件,如果目录不存在就手动创建一下。

在控制器中调用模板

use Hyperf\View\RenderInterface; //引入
public function index(RenderInterface $render){
       $name="hyperf";
		return $render->render('index', ['name' => $name]);    //渲染模板并输出
    }

           

index.html代码如下,因采用了thinkphp的模板引擎,所有直接使用thinkphp的模板语法即可:

${name}