char101 / workerlib
Requires
- erusev/parsedown: ^1.7
- fenom/fenom: ^2.12
- nikic/fast-route: ^1.3
- phug/phug: ^1.8
- scssphp/scssphp: ^1.5
- symfony/var-dumper: ^5.3
- workerman/workerman: dev-master
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 响应
- text ->
#[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].php 或 Controller\[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