警告を回避する方法: PhpStorm/Lumen で call_user_func を正しくマークするときは、対応する 'try' ブロックで例外をスローするようにしてください。
<p>Lumen アプリケーションには次のような認証ミドルウェアがあります: </p>
<pre class="brush:php;toolbar:false;">クラス認証
{
パブリック関数ハンドル(Request $request、Closure $next、string|null $guard = null): 混合
{
試す {
/**@var \Illuminate\Auth\RequestGuard $requestGuard*/
$requestGuard = $this->auth->guard($guard);
$signedIn = $requestGuard->check();
// ...
} catch (NoUserIdProvidedException) {
// ...
}
// ...
}
}</pre>
<p>これは正常に動作しますが、PhpStorm は、例外 (例からほとんどを削除しましたが、いくつかあります) は含まれているブロックによってスローされているにもかかわらず、スローされていないことを報告します。 </p>
<p>RequestGuard の奥深くで call_user_func</p> が使用されているようです。
<pre class="brush:php;toolbar:false;">return $this->user = call_user_func(
$this->コールバック、$this->リクエスト、$this->getProvider()
);</pre>
<p>AuthServiceProvider 内のクロージャ セットを呼び出します。これは、カスタム Security クラスのミドルウェア メソッドを使用します。</p>
<pre class="brush:php;toolbar:false;">class AuthServiceProvider extends ServiceProvider
{
パブリック関数 boot(): void
{
$this->app['auth']->viaRequest('api', function ($request) {
$security = 新しいセキュリティ();
return $security->middleware($request);
});
}
}</pre>
<p>私の意見では、ミドルウェアのドキュメント ブロックは正しいです</p>
<pre class="brush:php;toolbar:false;">/*** @param リクエスト $request
* @return bool|object|null
* @throws無効なドメインユーザー
* @throws NoDomainUserException
* @throws NoTokenOnRecordException
* @throws NoTokenProvidedException
* @throws NoUserException
* @throws NoUserIdProvidedException*/
パブリック関数ミドルウェア(Request $request): object|bool|null
{</pre>
<p>ドキュメント ブロックを追加します。例: </p>
<pre class="brush:php;toolbar:false;">/*** @throws NoUserIdProvidedException*/</pre>
<p>クロージャでは、認証プロバイダーまたは処理コードによって警告が消えません。誤検知を避けるためにコードにコメントまたはタイプヒントを付ける方法はありますか?ただ検査を止めたくない。 </p>