webman-tech / laravel-validation

Laravel illuminate/validation for webman
14 stars 1 forks source link

关于使用中会出现报错getRemoteIp() on null #11

Closed DaybreakY closed 9 months ago

DaybreakY commented 9 months ago

使用过程中调用第一次一般可以成功,然后再次调用当前接口就会有可能报错提示getRemoteIp() on null 报错如下: Error: Call to a member function getRemoteIp() on null in /work/codingItems/webman-api/vendor/workerman/webman-framework/src/Http/Request.php:178 Stack trace:

0 /work/codingItems/webman-api/vendor/webman-tech/polyfill/src/Traits/SymfonyRequestWrapper.php(21): Webman\Http\Request->getRemoteIp()

使用的版本是: webman-tech/laravel-validation:1.2.0 workerman/webman-framework:1.5.11

krissss commented 9 months ago

能给下具体的复现步骤吗? validate rules 是什么? 两次调用指什么?请求两次吗

DaybreakY commented 9 months ago

验证 规则是什么? 两次调用指什么? 请求两次吗 是请求接口两次以上,第一次请求接口基本是没问题,第二次请求的话就大概率会报getRemoteIp()的错误,后面就基本是提示这个错误,接口无法使用 规则如下array:2 [ "account" => array:3 [ 0 => "required" 1 => "string" 2 => Illuminate\Validation\Rules\Exists {#95

table: "sys_user"

column: "account"

wheres: []

using: []

} ] "password" => array:2 [ 0 => "required" 1 => "string" ] ]

DaybreakY commented 9 months ago

补充一点就是,我的request是在构造方法中做的依赖注入,没使用方法中去做注入。 public function __construct(public Request $req){} 调用的时候是通过this去调用的validator(LaravelRequest::wrapper($this->req)->all()。

krissss commented 9 months ago

当前的这个报错应该就是这个引起的,$this->req 在第二次请求时不存在了 $this->req 不存在的原因可能跟控制器复用有关系,具体见 https://www.workerman.net/doc/webman/controller.html#%E6%8E%A7%E5%88%B6%E5%99%A8%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

另外,改用注入的 $req 试下是否可行,LaravelRequest::wrapper($req)

DaybreakY commented 9 months ago

当前的这个报错应该就是这个引起的,$this->req 在第二次请求时不存在了 $this->req 不存在的原因可能跟控制器复用有关系,具体见 https://www.workerman.net/doc/webman/controller.html#%E6%8E%A7%E5%88%B6%E5%99%A8%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

另外,改用注入的 $req 试下是否可行,LaravelRequest::wrapper($req)

我是关闭了复用的,针对于这个应该是webman当中使用php-di出现的问题,相关问题我已经去webman那边咨询了,因为对于开启了php-di的依赖注入后,无法随着控制器的销毁而且销毁对应注入创建的实例类,最后导致再次运行的时候,用的还是原来的,而且这种情况只出现在了post请求中,get请求正常