char101/workerlib

此包的最新版本(dev-master)没有可用的许可信息。

dev-master 2021-08-29 10:58 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:49 UTC


README

描述

Workerman 提供实用类。

要求

  • PHP >= 8.0
  • event 扩展
  • redis 扩展

安装

composer.json 中设置最小稳定性为 dev

如果没有现有的 composer.json

echo '{"minimum-stability": "dev"}' > composer.json

或添加到现有的 composer.json

{
    "minimum-stability": "dev"
}

安装包

composer require char101/workerlib

创建 main.php 作为应用程序入口点

<?php

require __DIR__.'vendor/autoload.php';

$app = new App(function($app) {
    // Code in here will be run in the `onStart` worker event handler
    // and can be reloaded using Workerman reload command.
    // Include custom PHP files here.
});

$app->run();

配置应用程序

cp vendor/char101/workerlib/config.yaml .

打开 config.yaml 并配置值。

运行服务器

运行服务器

php main.php start

重新加载代码

php main.php reload

注意:重新加载仅适用于在 new App 给定的 闭包 内指定的代码。

重新启动代码

php main.php restart

重新启动也会重新加载 main.php 中的代码更改。

路由

路由可以通过3种方式注册

使用闭包的 route 方法

<?php

require __DIR__.'/vendor/autoload.php';

$app = new App();

$app->route('/user/{id}', function($id) {
    return ['id' => id];
});

$app->run();

使用类的 route 方法

classes/Controller/User.php

class Controller_User extends Controller
{
    public function view($id)
    {
        return ['id' => $id];
    }
}
require __DIR__.'/vendor/autoload.php';

$app = new App();

$app->route('/user', Controller_User::class, [
    'GET /{id}' => 'view',
    'POST /{id}' => 'saveEdit'
]);

$app->run();

使用注解

classes/Controller/User.php

#[Route]
class Controller_User extends Controller
{
    #[Route('GET /{id}']
    public function view($id)
    {
        return ['id' => $id];
    }

    #[Route('POST /{id}')]
    public function saveEdit($id)
    {
        return this->redirect('/user/'.$id);
    }
}

约定

  • 路由处理程序返回类型
    • text -> text/plain
    • array/object -> application/json
    • 响应 -> HTTP 响应

#[Route] 等于 #[Route('/class_name')] 用于类或 #[Route('GET /method_name')] 用于方法。

#[Route('/url')] 等于 #[Route('GET /url')] 用于方法。

目录布局

app/
  composer.json
  main.php
  classes/
    Controller/
      User.php
  templates/
    layout.pug
    user/
      login.pug
  vendor/

App

App 类是初始化并运行 Workerman 的应用程序实例。

控制器

classes\controller\[Class].phpController\[Class].php 中创建新的控制器。

模板

templates\[controller_name_in_snake_case].pug 中创建新的模板。

数据库

config.yaml 中配置 PDO URL。

SQL

在与 [Controller].php 相同的目录中创建 [Controller].sql,然后使用 $sql 参数使用 SQLLoader 服务。

classes/Controller/User.php:

<?php

class Controller_User extends Controller
{
    public function index($sql)
    {
        return $sql->users();
    }
}

classes/Controller/User.sql:

--: users: all
SELECT * FROM user

SQL 标识符的格式为 --: {name}: {return type}{return type} 是可选的,如果未指定,则默认为 execute。可用的 {return type} 指的是 DB 类的方法。

  • execute: 执行语句并返回 Statement 对象
  • one: 返回第一行第一列的标量值
  • row: 返回单行
  • col: 返回所有行的第一列的值
  • all: 返回所有行
  • map: 将所有行作为关联数组返回,其中第一列作为数组键

辅助方法

  • insert: $db->insert('table', ['col' => 'value'], 'returning id');
  • update: $db->update('table', ['col' => 'value'], ['where' => 'value']);
  • delete: $db->update('table', ['where' => 'value'], 'returning *');
  • list: $db->list([1, 2, 3]);
  • raw: ['created' => DB::raw('CURRENT_TIMESTAMP')]

迁移

尚未提供。

其他服务

Redis

$redis = RedisDB::instance('cache');
$redis->set('key', 'value');

LDAP

开发

使用 watchexec 在文件更改时自动重新加载服务器

watchexec --restart --no-ignore --exts php,pug,yaml --ignore public -- php main.php reload

测试

部署