webman手册上 中间件配置匿名函数报错

hk2018

问题描述

https://www.workerman.net/doc/webman/middleware.html
截图
这里说可以 在 config/middleware.php 配匿名函数,但是
根据 webman-framework/src/Middleware.php 64 行左右的代码

 public static function load($allMiddlewares, string $plugin = '')
    {
        if (!is_array($allMiddlewares)) {
            return;
        }
        foreach ($allMiddlewares as $appName => $middlewares) {
            if (!is_array($middlewares)) {
                throw new RuntimeException('Bad middleware config');
            }
            if ($appName === '@') {
                $plugin = '';
            }
            if (strpos($appName, 'plugin.') !== false) {
                $explode = explode('.', $appName, 4);
                $plugin = $explode[1];
                $appName = $explode[2] ?? '';
            }
            foreach ($middlewares as $className) {
                if (method_exists($className, 'process')) {
                    static::$instances[$plugin][$appName][] = [$className, 'process'];
                } else {
                    // @todo Log
                    echo "middleware $className::process not exsits\n";
                }
            }
        }

走到 echo "middleware $className::process not exsits\n";
而$className又是个匿名函数,不能转化为字符输出,就会报下面错误,是手册写的有问题还是我使用姿势不对呢

Error: Object of class Closure could not be converted to string in /var/www/webman-admin/webman/vendor/workerman/webman-framework/src/Middleware.php:64
Stack trace:
#0 /var/www/webman-admin/webman/support/bootstrap.php(75): Webman\Middleware::load(Array)
#1 /var/www/webman-admin/webman/vendor/workerman/webman-framework/src/support/helpers.php(549): require_once('/var/www/webman...')
#2 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(2577): {closure}(Object(Workerman\Worker))
#3 [internal function]: Workerman\Worker->Workerman\{closure}()
#4 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(2594): Fiber->start()
#5 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(1749): Workerman\Worker->run()
#6 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(1546): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))
#7 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(1526): Workerman\Worker::forkWorkersForLinux()
#8 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(1894): Workerman\Worker::forkWorkers()
#9 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(1831): Workerman\Worker::monitorWorkersForLinux()
#10 /var/www/webman-admin/webman/vendor/workerman/workerman/src/Worker.php(596): Workerman\Worker::monitorWorkers()
#11 /var/www/webman-admin/webman/vendor/workerman/webman-framework/src/support/App.php(143): Workerman\Worker::runAll()
#12 /var/www/webman-admin/webman/start.php(6): support\App::run()

程序代码或配置

config/middleware.php

return [

    // 全局中间件
    '' => [
        function(){
            return new app\middleware\MiddlewareB('b',"bbb");
        },
    ]
];

操作系统环境及workerman/webman等具体版本

[root@master1 webman]# php -v
PHP 8.2.27 (cli) (built: Feb 15 2025 15:43:16) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.27, Copyright (c) Zend Technologies
with Zend OPcache v8.2.27, Copyright (c), by Zend Technologies

webman版本信息
"name": "workerman/webman-framework",
"version": "v2.1.2",

185 1 0
1个回答

walkor 打赏

文档写错了,不支持匿名函数

🔝