安装 webman
初始备注:
不要使用 php8.0 及以上版本(除非不用 think-cache 缓存插件)think-cache 无法友好的支持 php8.0 及以上版本。
目前使用 php7.4
composer 安装 1、创建项目
1 composer create-project workerman/webman
2、运行
进入 webman 目录
debug 方式运行(用于开发调试)
daemon 方式运行(用于正式环境)
注意 webman 从 1.2.3 版本开始专门为 windows 系统提供了启动脚本(需要为 php 配置好环境变量),windows 用户请双击 windows.bat 即可启动 webman,或者运行 php windows.php 启动 webman。
3、访问
浏览器访问 http://ip 地址:8787
基础功能 需要安装的 composer 扩展(默认以熟悉的 tp 为主) 安装 think-template 1、composer 安装
1 composer require topthink/think-template
2、修改配置 config/view.php 为
1 2 3 4 5 6 <?php use support \view \ThinkPHP ;return [ 'handler' => ThinkPHP::class , ];
提示 其它配置选项通过 options 传入,例如
1 2 3 4 5 6 7 8 return [ 'handler' => ThinkPHP::class , 'options' => [ 'view_suffix' => 'html' , 'tpl_begin' => '{' , 'tpl_end' => '}' ] ];
3、thinkphp 模板的例子
修改配置 config/view.php 为
1 2 3 4 5 6 <?php use support \view \ThinkPHP ;return [ 'handler' => ThinkPHP::class ];
app/controller/User.php 如下
1 2 3 4 5 6 7 8 9 10 11 12 <?php namespace app \controller ;use support \Request ;class User { public function hello (Request $request ) { return view ('user/hello' , ['name' => 'webman' ]); } }
文件 app/view/user/hello.html 如下
1 2 3 4 5 6 7 8 9 10 <!doctype html> <html> <head> <meta charset="utf-8" > <title>webman</title> </head> <body> hello {$name } </body> </html>
更多文档参考 think-template
安装 ThinkORM 1 composer -W require webman/think-orm
经测试实际安装此扩展会报错,所以我们使用手动安装并配置 think-orm。
webman/think-orm 实际上是一个自动化安装 toptink/think-orm 的插件,如果你的 webman 版本低于 1.2 无法使用插件请参考文章手动安装并配置 think-orm 。
安装 ThinkCache 1 composer -W require webman/think-cache
webman/think-cache 实际上是一个自动化安装 toptink/think-cache 的插件。
暂对 php8.0 及以上不友好,安装后使用会报错。
配置文件 配置文件为 config/thinkcache.php
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php namespace app \controller ; use support \Request ; use think \facade \Cache ; class User { public function db (Request $request ) { $key = 'test_key' ; Cache ::set ($key , rand ()); return response (Cache ::get ($key )); } }
Think-Cache 使用文档 ThinkCache 文档地址
安装 redis 组件 webman 的 redis 组件默认使用的是illuminate/redis ,也就是 laravel 的 redis 库,用法与 laravel 相同。
使用 illuminate/redis 之前必须先给 php-cli 安装 redis 扩展。
使用命令 php -m | grep redis 查看 php-cli 是否装了 redis 扩展。注意:即使你在 php-fpm 安装了 redis 扩展,不代表你在 php-cli 可以使用它,因为 php-cli 和 php-fpm 是不同的应用程序,可能使用的是不同的 php.ini 配置。使用命令 php –ini 来查看你的 php-cli 使用的是哪个 php.ini 配置文件。
安装 1 composer require -W illuminate/redis
1 2 3 4 5 6 7 8 9 10 11 redis配置文件在`config/redis.php` ```php return [ 'default' => [ 'host' => '127.0.0.1' , 'password' => null , 'port' => 6379 , 'database' => 0 , ] ];
示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php namespace app \controller ;use support \Request ;use support \Redis ;class User { public function db (Request $request ) { $key = 'test_key' ; Redis ::set ($key , rand ()); return response (Redis ::get ($key )); } }
具体使用教程: https://www.workerman.net/doc/webman/db/redis.html
安装 think 验证器 安装 1 composer require topthink/think-validate
验证器也不支持 php8.0 及以上,如果需要支持需要自行查找更多方案。
基本用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?php namespace app \index \validate ;use Tinywan \Validate \Validate ;class UserValidate extends Validate { protected $rule = [ 'name' => 'require|max:25' , 'age' => 'require|number|between:1,120' , 'email' => 'require|email' ]; protected $message = [ 'name.require' => '名称必须' , 'name.max' => '名称最多不能超过25个字符' , 'age.require' => '年龄必须是数字' , 'age.number' => '年龄必须是数字' , 'age.between' => '年龄只能在1-120之间' , 'email.require' => '邮箱必须是数字' , 'email.email' => '邮箱格式错误' ]; }
验证器调用代码如下:
1 2 3 4 5 6 7 8 9 10 $data = [ 'name' => 'Tinywan' , 'age' => 24 , 'email' => 'Tinywan@163.com' ]; $validate = new \app\index\validate\UserValidate;if (!$validate ->check ($data )) { var_dump ($validate ->getError ()); }
更多用法可以参考 6.0 完全开发手册的 验证 章节
安装验证码 gregwar/captcha 项目地址 https://github.com/Gregwar/Captcha
安装 1 composer require gregwar/captcha 1.*
基本使用 1 建立文件 app/controller/Login.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <?php namespace app \controller ;use support \Request ;use Gregwar \Captcha \CaptchaBuilder ;class Login { public function index (Request $request ) { return view ('login/index' ); } public function captcha (Request $request ) { $builder = new CaptchaBuilder ; $builder ->build (); $request ->session ()->set ('captcha' , strtolower ($builder ->getPhrase ())); $img_content = $builder ->get (); return response ($img_content , 200 , ['Content-Type' => 'image/jpeg' ]); } public function check (Request $request ) { $captcha = $request ->post ('captcha' ); if (strtolower ($captcha ) !== $request ->session ()->get ('captcha' )) { return json (['code' => 400 , 'msg' => '输入的验证码不正确' ]); } return json (['code' => 0 , 'msg' => 'ok' ]); } }
建立模版文件 **app/view/login/index.html **
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE html > <html > <head > <meta charset ="utf-8" /> <title > 验证码测试</title > </head > <body > <form method ="post" action ="/login/check" > <img src ="/login/captcha" /> <br /> <input type ="text" name ="captcha" /> <input type ="submit" value ="提交" /> </form > </body > </html >
基本使用 2 (直接在控制器里使用并验证) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $this ->validate = new \think\Validate ();$param = $request ->all ();$this ->validate->rule ([ 'captcha|验证码' => 'require' , 'uniqid|uniqid' => 'require' , 'username|用户名' => 'require' , 'password|密码' => 'require' , ]); $this ->validate->message ([ 'captcha.require' => '验证码不能为空' , 'uniqid.require' => 'uniqid不能为空' , 'username.require' => '登录名不能为空' , 'password.require' => '密码不能为空' , ]); if ( ! $this ->validate->check ($param )) { return json ($this ->validate->getError ()); }
webman/casbin 权限控制插件 简介 webman casbin 权限控制插件。它基于 PHP-Casbin , 一个强大的、高效的开源访问控制框架,支持基于 ACL , RBAC , ABAC 等访问控制模型。
依赖
安装 1 composer require casbin/webman-permission
使用
依赖注入配置 修改配置 config/container.php,其最终内容如下:
1 2 3 4 $builder = new \DI\ContainerBuilder ();$builder ->addDefinitions (config ('dependence' , []));$builder ->useAutowiring (true );return $builder ->build ();
数据库配置
默认策略存储是使用的 ThinkORM。 如使用 laravel 的数据库 illuminate/database,请按照官方文档按照相应的依赖包:https://www.workerman.net/doc/webman/db/tutorial.html
🚀 (1) 模型配置 📒📒📒 使用 ThinkORM(默认) 📒📒📒
修改数据库 thinkorm.php 配置 📕📕📕 使用 laravel 数据库(可选) 📕📕📕
修改数据库 database.php 配置 修改数据库 permission.php 的 adapter 适配器为 laravel 适配器
(2) 创建 casbin_rule 数据表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE `casbin_rule` ( `id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT, `ptype` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v0` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v1` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v2` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v3` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v4` VARCHAR ( 128 ) NOT NULL DEFAULT '' , `v5` VARCHAR ( 128 ) NOT NULL DEFAULT '' , PRIMARY KEY ( `id` ) USING BTREE, KEY `idx_ptype` ( `ptype` ) USING BTREE, KEY `idx_v0` ( `v0` ) USING BTREE, KEY `idx_v1` ( `v1` ) USING BTREE, KEY `idx_v2` ( `v2` ) USING BTREE, KEY `idx_v3` ( `v3` ) USING BTREE, KEY `idx_v4` ( `v4` ) USING BTREE, KEY `idx_v5` ( `v5` ) USING BTREE ) ENGINE = INNODB CHARSET = utf8mb4 COMMENT = '策略规则表' ;
(3) 配置 config/redis 配置
重启 webman
或者
1 php start.php restart -d
用法 安装成功后,可以这样使用:
1 2 3 4 5 6 7 8 use Tinywan \Casbin \Permission ;Permission ::addPermissionForUser ('eve' , 'articles' , 'read' );Permission ::addRoleForUser ('eve' , 'writer' );Permission ::addPolicy ('writer' , 'articles' ,'edit' );
你可以检查一个用户是否拥有某个权限:
1 2 3 4 5 if (Permission ::enforce ("eve" , "articles" , "edit" )) { echo '恭喜你!通过权限认证' ; } else { echo '对不起,您没有该资源访问权限' ; }
具体教程: https://github.com/php-casbin/webman-permission
更多 API 参考 Casbin API 。
路由自动解析 当 app 目录结构非常复杂,webman 无法自动解析时可以安装 webman 的 自动路由插件 ,它会自动检索所有的控制器并为其自动配置对应的路由,让其通过 url 可以访问。
安装 1 composer require webman/auto-route
提示 你仍然可以在 config/route.php 中手动设置某些路由,自动路由插件会优先使用 config/route.php 里的配置。