Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mengelakkan amaran: apabila menandakan call_user_func dengan betul dalam PhpStorm/Lumen, pastikan untuk membuang pengecualian dalam blok 'cuba' yang sepadan?

<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粉009186469P粉009186469384 hari yang lalu436

membalas semua(1)saya akan balas

  • P粉805535434

    P粉8055354342023-09-04 21:30:05

    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
        {
          // ....
        }
    }

    balas
    0
  • Batalbalas