Bagaimana untuk mengelakkan amaran: apabila menandakan call_user_func dengan betul dalam PhpStorm/Lumen, pastikan untuk membuang pengecualian dalam blok 'cuba' yang sepadan?
P粉009186469
P粉009186469 2023-09-03 22:55:00
0
1
495
<p>Saya mempunyai perisian tengah pengesahan dalam aplikasi Lumen saya seperti ini: </p> <pre class="brush:php;toolbar:false;">class Authenticate { pemegang fungsi awam(Permintaan $permintaan, Penutupan $seterusnya, rentetan|null $guard = null): bercampur { cuba { /**@var IlluminateAuthRequestGuard $requestGuard*/ $requestGuard = $ini->auth->guard($guard); $signedIn = $requestGuard->check(); // ... } tangkapan (NoUserIdProvidedException) { // ... } // ... } }</pre> <p>Ia berfungsi dengan baik, tetapi PhpStorm melaporkan bahawa pengecualian (saya mengalih keluar kebanyakan daripadanya daripada contoh, terdapat beberapa) tidak dibuang oleh blok yang mengandungi, walaupun begitu. </p> <p>Nampaknya jauh di dalam RequestGuard ia menggunakan call_user_func</p> <pre class="brush:php;toolbar:false;">return $this->user = call_user_func( $this->callback, $this->request, $this->getProvider() );</pra> <p>Panggil set penutupan dalam AuthServiceProvider, yang menggunakan kaedah middleware pada kelas Keselamatan tersuai: </p> <pre class="brush:php;toolbar:false;">class AuthServiceProvider memanjangkan ServiceProvider { but fungsi awam(): void { $this->app['auth']->viaRequest('api', function ($request) { $security = new Security(); pulangkan $security->middleware($request); }); } }</pre> <p>Pada pendapat saya, blok dokumentasi untuk middleware adalah betul</p> <pre class="brush:php;toolbar:false;">/*** @param Minta $permintaan * @return bool|objek|null * @throws InvalidDomainUser * @throws NoDomainUserException * @membuang NoTokenOnRecordException * @membuang NoTokenProvidedException * @membuang NoUserException * @membuang NoUserIdProvidedException*/ perisian tengah fungsi awam(Permintaan $permintaan): objek|bool|null {</pre> <p>Tambah blok dokumen, contohnya: </p> <pre class="brush:php;toolbar:false;">/*** @membuang NoUserIdProvidedException*/</pre> <p>Dalam penutupan, pembekal pengesahan atau kod pengendalian tidak menghilangkan amaran, adakah terdapat cara untuk mengulas atau menaip pembayang kod untuk mengelakkan positif palsu? Saya tidak mahu hanya mematikan pemeriksaan. </p>
P粉009186469
P粉009186469

membalas semua(1)
P粉805535434

Cara pengawal berfungsi kelihatan terlalu rumit untuk analisis statik, jadi saya memfaktorkan semula untuk mengalihkan kod tersuai yang mendasari keluar dari pengawal dan terus ke perisian tengah, yang berfungsi dan pengecualian kini dikesan dengan betul

class Authenticate
{
    public function handle(Request $request, Closure $next, string|null $guard = null): mixed
    {
        try {
            $security = new Security();
            $user = $security->middleware($request);
            $signedIn = !empty($user->id);

            // ...

        } catch (NoUserIdProvidedException) {
            // ...
        }

        // ...
    }
}

Kelas keselamatan adalah logik tersuai, adalah penting bahawa blok dokumentasi dengan @throws cukup dekat untuk ditemui oleh IDE

class Security{
    /**
     * @param Request $request
     * @return bool|object|null
     * @throws InvalidDomainUser
     * @throws NoDomainUserException
     * @throws NoTokenOnRecordException
     * @throws NoTokenProvidedException
     * @throws NoUserException
     * @throws NoUserIdProvidedException
     */
    public function middleware(Request $request): object|bool|null
    {
      // ....
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan