경고를 방지하는 방법: PhpStorm/Lumen에서 call_user_func를 올바르게 표시할 때 해당 'try' 블록에서 예외를 발생시켜야 합니까?
P粉009186469
2023-09-03 22:55:00
<p>Lumen 애플리케이션에는 다음과 같은 인증 미들웨어가 있습니다.</p>
<pre class="brush:php;toolbar:false;">class 인증
{
공용 함수 핸들(요청 $request, 클로저 $next, 문자열|null $guard = null): 혼합
{
노력하다 {
/**@var IlluminateAuthRequestGuard $requestGuard*/
$requestGuard = $this->auth->guard($guard);
$signedIn = $requestGuard->check();
// ...
} 잡기(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에 있는 클로저 세트를 호출합니다. </p>
<pre class="brush:php;toolbar:false;">class AuthServiceProvider는 ServiceProvider를 확장합니다.
{
공개 함수 boot(): 무효
{
$this->app['auth']->viaRequest('api', function ($request) {
$보안 = 새로운 보안();
$security->미들웨어($request)를 반환합니다.
});
}
}</pre>
<p>제 생각에는 미들웨어에 대한 문서 블록이 정확하다고 생각합니다</p>
<pre class="brush:php;toolbar:false;">/*** @param 요청 $request
* @return 부울|객체|널
* @throws InvalidDomainUser
* @NoDomainUserException 발생
* @NoTokenOnRecordException 발생
* @NoTokenProvidedException 발생
* @NoUserException 발생
* @NoUserIdProvidedException 발생*/
공용 함수 미들웨어($request 요청): object|bool|null
{</pre>
<p>문서 블록을 추가하세요. 예: </p>
<pre class="brush:php;toolbar:false;">/*** @NoUserIdProvidedException 발생*/</pre>
<p>클로저에서 인증 제공자 또는 처리 코드가 경고를 사라지게 하지 않습니다. 거짓 긍정을 피하기 위해 코드에 주석을 달거나 힌트를 입력할 수 있는 방법이 있습니까? 나는 검사를 끄고 싶지 않습니다. </p>
가드의 작동 방식은 정적 분석에 비해 너무 복잡해 보였기 때문에 기본 사용자 정의 코드를 가드에서 미들웨어로 직접 옮기도록 리팩토링했는데, 작동하고 이제 예외가 올바르게 감지됩니다. 으아악
보안 클래스는 사용자 정의 논리입니다. @throws가 포함된 문서 블록이 IDE에서 찾을 수 있을 만큼 가깝다는 것이 중요합니다으아악