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