主要功能特性及變更如下,感謝各位熱心開(kāi)發(fā)者的提交
利用命令composer create-project workerman/webman
新建的webman項(xiàng)目 app.controller_reuse
配置將默認(rèn)為
false
,開(kāi)發(fā)者仍然可以手動(dòng)將其設(shè)置為true
開(kāi)啟控制器復(fù)用。
此變動(dòng)不影響老項(xiàng)目。
提示
很多開(kāi)發(fā)者習(xí)慣了傳統(tǒng)框架每個(gè)請(qǐng)求都重新初始化一個(gè)控制器的模式,所以官方默認(rèn)將控制器復(fù)用關(guān)閉。
關(guān)閉控制器復(fù)用后helloworld
壓測(cè)性能損失約10%左右,但真實(shí)業(yè)務(wù)下性能損失可以忽略不計(jì)。
例子
<?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 的貢獻(xiàn)
例如
public_path('css/main.css');
//相當(dāng)于
public_path() . '/css/main.css';
感謝 377960738 的貢獻(xiàn)
參見(jiàn) https://github.com/walkor/webman-framework/pull/69
感謝 krissss 的貢獻(xiàn)
-
)格式例如 /user/login-check
等同于 /user/loginCheck
等同于 /user/logincheck
其它更多變更請(qǐng)參考 github
升級(jí)以后就報(bào)錯(cuò):
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}
不行,報(bào)錯(cuò)了,加了 --with-all-dependencies 依然報(bào)錯(cuò):
./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
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
直接到vendor/workerman/下刪除 webman-framework,然后執(zhí)行 git clone https://github.com/walkor/webman-framework
@walkor
支持 支持控制器參數(shù)注入
是否可以支持 路由模型綁定
綁定呢
https://learnku.com/docs/laravel/9.x/routing/12209#route-model-binding
路徑中的參數(shù)直接綁定成一個(gè) 模型
<?php
use support\Request;
use App\Models\Admin;
public function show(Request $request,$id) {
$admin = $this->model->find($id);
$data = [
'data' => $admin,
'message' => '獲取數(shù)據(jù)成功!'
];
return $this->rsp(...$data);
}
// 變成下面這種
public function show(Request $request,Admin $admin) {
$data = [
'data' => $admin,
'message' => '獲取數(shù)據(jù)成功!'
];
return $this->rsp(...$data);
}
我想控制器復(fù)用和非復(fù)用的區(qū)別是什么?能具體列出幾點(diǎn)嗎?目前我感覺(jué)不復(fù)用可能會(huì)增加進(jìn)程內(nèi)存吧?
提示
很多開(kāi)發(fā)者習(xí)慣了傳統(tǒng)框架每個(gè)請(qǐng)求都重新初始化一個(gè)控制器的模式,所以官方默認(rèn)將控制器復(fù)用關(guān)閉。
關(guān)閉控制器復(fù)用后helloworld壓測(cè)性能損失約10%左右,但真實(shí)業(yè)務(wù)下性能損失可以忽略不計(jì)。
- 復(fù)用: __construct只在第一次請(qǐng)求的時(shí)候執(zhí)行一次,
- 不復(fù)用: __construct在每次請(qǐng)求的時(shí)候執(zhí)行
我看了源碼是這么理解這個(gè)__construct的。有內(nèi)存上的區(qū)別的嗎?就是多次訪問(wèn)這個(gè)控制器內(nèi)存會(huì)無(wú)限增加嗎?