webman 发布 1.4.6

walkor

主要功能特性及变更如下,感谢各位热心开发者的提交

默认关闭控制器复用

利用命令composer create-project workerman/webman 新建的webman项目 app.controller_reuse 配置将默认为
false,开发者仍然可以手动将其设置为true开启控制器复用。

此变动不影响老项目。

提示
很多开发者习惯了传统框架每个请求都重新初始化一个控制器的模式,所以官方默认将控制器复用关闭。
关闭控制器复用后helloworld压测性能损失约10%左右,但真实业务下性能损失可以忽略不计。

支持控制器参数注入

例子

<?php
namespace app\controller;

use app\model\User;
use support\Request;

class User
{
    public function find(Request $request, User $user)
    {
        return $user->find(1);
    }
}

感谢 377960738 的贡献

helpers.php里路径相关函数支持子路径参数

例如

public_path('css/main.css');
//相当于
public_path() . '/css/main.css';

感谢 377960738 的贡献

自带的Container支持简单的依赖注入

参见 https://github.com/walkor/webman-framework/pull/69
感谢 krissss 的贡献

url驼峰支持短线(-)格式

例如 /user/login-check 等同于 /user/loginCheck 等同于 /user/logincheck

其它更多变更请参考 github

5343 22 0
22个回答

不败少龙

威武霸气

  • 暂无评论
江月闲谈

👍🏻👍🏻👍🏻👍🏻

  • 暂无评论
咸鱼.php

我爱老大

  • 暂无评论
yzh52521

666

  • 暂无评论
稚出

👍🏻👍🏻👍🏻👍🏻

  • 暂无评论
深林孤鹰

越来越完美

  • 暂无评论
WatcherLuo

支持控制器参数注入了,赞

  • 暂无评论
光尘

👍🏻👍🏻👍🏻👍🏻

  • 暂无评论
深林孤鹰

升级以后就报错:

ArgumentCountError: Too few arguments to function Workerman\Protocols\Http\Request::__construct(), 0 passed in D:\Webman\vendor\workerman\webman-framework\src\Container.php on line 65 and exactly 1 expected in D:\Webman\vendor\workerman\workerman\Protocols\Http\Request.php:80
Stack trace:
#0 D:\Webman\vendor\workerman\webman-framework\src\Container.php(65): Workerman\Protocols\Http\Request->__construct()
#1 D:\Webman\vendor\workerman\webman-framework\src\App.php(423): Webman\Container->make('support\\Request')
#2 D:\Webman\vendor\workerman\webman-framework\src\App.php(342): Webman\App::resolveMethodDependencies('', Object(app\Request), Array, Object(ReflectionMethod))
#3 D:\Webman\vendor\workerman\webman-framework\src\App.php(147): Webman\App::Webman\{closure}(Object(app\Request))
#4 D:\Webman\vendor\workerman\workerman\Connection\TcpConnection.php(638): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(app\Request))
#5 D:\Webman\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead(Resource id #166)
#6 D:\Webman\vendor\workerman\workerman\Worker.php(2463): Workerman\Events\Select->loop()
#7 D:\Webman\vendor\workerman\workerman\Worker.php(1449): Workerman\Worker->run()
#8 D:\Webman\vendor\workerman\workerman\Worker.php(1392): Workerman\Worker::forkWorkersForWindows()
#9 D:\Webman\vendor\workerman\workerman\Worker.php(557): Workerman\Worker::forkWorkers()
#10 D:\Webman\vendor\workerman\webman-framework\src\support\App.php(124): Workerman\Worker::runAll()
#11 D:\Webman\start.php(4): support\App::run()
#12 {main}
  • walkor 2022-09-19

    更新到master试下,composer require workerman/webman-framework dev-master

  • 深林孤鹰 2022-09-19

    不行,报错了,加了 --with-all-dependencies 依然报错:

    ./composer.json has been updated
    Running composer update workerman/webman-framework --with-all-dependencies
    Loading composer repositories with package information
    Updating dependencies
    Your requirements could not be resolved to an installable set of packages.

    Problem 1

    • Root composer.json requires workerman/webman-framework dev-master, found workerman/webman-framework[dev-master] but these were not loaded, likely because it conflicts with another require.
      Problem 2
    • webman/think-orm is locked to version v1.0.7 and an update of this package was not requested.
    • webman/think-orm v1.0.7 requires workerman/webman-framework ^1.2.1 -> found workerman/webman-framework[v1.2.1, ..., v1.4.6] but it conflicts with your root composer.json require (dev-master).

    Installation failed, reverting ./composer.json and ./composer.lock to their original content.

  • walkor 2022-09-19

    直接到vendor/workerman/下删除 webman-framework,然后执行 git clone https://github.com/walkor/webman-framework

  • 深林孤鹰 2022-09-19

    好啦,谢谢大神,原来是composer还没更新^^

liziyu

🐂🐃

  • 暂无评论
青衣煮茶

老大威武,支持

  • 暂无评论
Van Chin

@walkor

支持 支持控制器参数注入

是否可以支持 路由模型绑定 绑定呢

https://learnku.com/docs/laravel/9.x/routing/12209#route-model-binding

路径中的参数直接绑定成一个 模型

<?php

use support\Request;
use App\Models\Admin;

public function show(Request $request,$id) {

        $admin = $this->model->find($id);

        $data = [
            'data' => $admin,
            'message' => '获取数据成功!'
        ];

        return $this->rsp(...$data);
   }

// 变成下面这种

public function show(Request $request,Admin $admin) {

        $data = [
            'data' => $admin,
            'message' => '获取数据成功!'
        ];

        return $this->rsp(...$data);

   }
  • oliusha 2022-09-20

    第一个例子不就是你说的这个?

  • walkor 2022-09-20

    暂时没考虑加入这个特性

  • nitron 2022-09-20

    第一个例子不就是你说的这个?

  • Van Chin 2022-10-08

    不一样 第一个例子只是注入了 Model 没有 注入通过路由参数绑定的Model 实例

Tinywan

越来越好

  • 暂无评论
JackDx

支持~

  • 暂无评论
chenh

支持

  • 暂无评论
折雷

牛的

  • 暂无评论
nnicde

👍

  • 暂无评论
张一

666

  • 暂无评论
JonWong

666

  • 暂无评论
楚羽幽

牛逼,越来越喜欢webman了

rbb

我想控制器复用和非复用的区别是什么?能具体列出几点吗?目前我感觉不复用可能会增加进程内存吧?

  • rbb 2022-10-24

    目前还已知一点,不复用构造函数多次加载(调用),复用则一次加载

  • nitron 2022-10-24

    提示
    很多开发者习惯了传统框架每个请求都重新初始化一个控制器的模式,所以官方默认将控制器复用关闭。
    关闭控制器复用后helloworld压测性能损失约10%左右,但真实业务下性能损失可以忽略不计。

    • 复用: __construct只在第一次请求的时候执行一次,
    • 不复用: __construct在每次请求的时候执行
  • rbb 2022-10-25

    我看了源码是这么理解这个__construct的。有内存上的区别的吗?就是多次访问这个控制器内存会无限增加吗?

  • liziyu 2022-10-25

    webman遵守php的GC机制! ^_^
    https://www.jianshu.com/p/d73b3ca418b0

  • walkor 2022-10-25

    复用不复用对内存没影响。

    控制器复用与不复用区别参考手册 控制器

  • rbb 2022-10-25

    好的,已撸,谢谢回答

  • talentstone 2022-11-11

    老版本如何升级到新版本?

thistle

666

  • 暂无评论
年代过于久远,无法发表回答
🔝