警告を回避する方法: PhpStorm/Lumen で call_user_func を正しくマークするときは、対応する 'try' ブロックで例外をスローするようにしてください。
P粉009186469
P粉009186469 2023-09-03 22:55:00
0
1
397

Lumen アプリケーションには次のような認証ミドルウェアがあります:

クラス認証 { パブリック関数ハンドル(Request $request、Closure $next、string|null $guard = null): 混合 { 試す { /**@var \Illuminate\Auth\RequestGuard $requestGuard*/ $requestGuard = $this->auth->guard($guard); $signedIn = $requestGuard->check(); // ... } catch (NoUserIdProvidedException) { // ... } // ... } }

これは正常に動作しますが、PhpStorm は、例外 (例からほとんどを削除しましたが、いくつかあります) は含まれているブロックによってスローされているにもかかわらず、スローされていないことを報告します。

RequestGuard の奥深くで call_user_func

が使用されているようです。
return $this->user = call_user_func( $this->コールバック、$this->リクエスト、$this->getProvider() );

AuthServiceProvider 内のクロージャ セットを呼び出します。これは、カスタム Security クラスのミドルウェア メソッドを使用します。

class AuthServiceProvider extends ServiceProvider { パブリック関数 boot(): void { $this->app['auth']->viaRequest('api', function ($request) { $security = 新しいセキュリティ(); return $security->middleware($request); }); } }

私の意見では、ミドルウェアのドキュメント ブロックは正しいです

/*** @param リクエスト $request * @return bool|object|null * @throws無効なドメインユーザー * @throws NoDomainUserException * @throws NoTokenOnRecordException * @throws NoTokenProvidedException * @throws NoUserException * @throws NoUserIdProvidedException*/ パブリック関数ミドルウェア(Request $request): object|bool|null {

ドキュメント ブロックを追加します。例:

/*** @throws NoUserIdProvidedException*/

クロージャでは、認証プロバイダーまたは処理コードによって警告が消えません。誤検知を避けるためにコードにコメントまたはタイプヒントを付ける方法はありますか?ただ検査を止めたくない。

P粉009186469
P粉009186469

全員に返信 (1)
P粉805535434

ガードの動作方法は静的分析には少し複雑すぎるように思えたので、基盤となるカスタム コードをガードから直接ミドルウェアに移動するようにリファクタリングしました。これは機能し、異常が正しく検出されるようになりました。

リーリー

セキュリティ クラスはカスタム ロジックです。重要なのは、@throws を含むドキュメント ブロックが IDE によって検出されるのに十分近いことです。

リーリー
いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!