Visual Studio Code PHP Intelephense zeigt weiterhin nicht den erforderlichen Fehler an


142

Nach dem letzten Update von PHP Intelephense, das ich heute bekomme, zeigt das Intelephense immer wieder einen Fehler für ein undefiniertes Symbol für meine Route (und auch für andere Klassen) an. Es gibt keinen Fehler wie diesen zuvor und es stört mich.

Hier ist der Fehler-Screenshot:

Geben Sie hier die Bildbeschreibung ein

Und das ist mein Code:

Route::group(['prefix' => 'user', 'namespace' => 'Membership', 'name' => 'user.'], function () {
    Route::get('profile', 'ProfileController@show')->name('profile.show');
    Route::patch('profile', 'ProfileController@update')->name('profile.update');
    Route::patch('change-password', 'ChangePasswordController@change')->name('change-password');
    Route::get('role', 'ProfileController@getRole')->name('profile.role');
    Route::get('summary', 'SummaryController@show')->name('summary');
    Route::get('reserved', 'AuctionController@reservedAuction')->name('reserved');
});

Eigentlich gibt es keinen Fehler in diesem Code, aber die Intelephense zeigt immer wieder einen Fehler an. Gibt es eine Möglichkeit, dies zu beheben?


Ich habe ein Problem zu diesem Thema in der
Problemwarteschlange

Wenn in Ihrer Route ein undefinierter Fehler auf Route api.phpangezeigt wird, lesen Sie die Antwort von @ user12483351 weiter unten. Das hat es für mich behoben. Ich bin auf Intelephese 1.3.6.
dotNET

Antworten:


103

Intelephense 1.3 fügte eine undefinierte Typ-, Funktions-, Konstanten-, Klassenkonstanten-, Methoden- und Eigenschaftsdiagnose hinzu, während es zuvor in 1.2 nur eine undefinierte Variablendiagnose gab.

Einige Frameworks sind so geschrieben, dass sie dem Benutzer bequeme Verknüpfungen bieten, es statischen Analyse-Engines jedoch erschweren, zur Laufzeit verfügbare Symbole zu erkennen.

Stub-Generatoren wie https://github.com/barryvdh/laravel-ide-helper helfen dabei, die Lücke hier zu schließen. Wenn Sie diese mit Laravel verwenden, werden viele der falschen Diagnosen behoben, indem konkrete Definitionen von Symbolen bereitgestellt werden, die leicht entdeckt werden können.

Dennoch ist PHP eine sehr flexible Sprache und es kann andere Fälle von falschen undefinierten Symbolen geben, abhängig davon, wie Code geschrieben wird. Aus diesem Grund verfügt Intelephense seit 1.3.3 über Konfigurationsoptionen zum Aktivieren / Deaktivieren jeder Kategorie undefinierter Symbole, um sie an den Arbeitsbereich und den Codierungsstil anzupassen.

Diese Optionen sind: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Wenn Sie alle diese Werte auf false setzen, intelephense.diagnostics.undefinedVariableswird das Verhalten von Version 1.2 angezeigt. Siehe die Benutzeroberfläche der VSCode-Einstellungen und suchen Sie nach intelephense.


Verging ein paar Tage mit nervigen Warnungen, jetzt mit dem letzten Update 1.3.3 - alles in Ordnung. Danke @bmewburn
Tariqul Islam

1
Vielen Dank für die separate Konfiguration. Im Moment habe ich undefinedMethods deaktiviert, da Intelephense den Laravel-Helfer nicht auth()->user()als Klasse \ App \ User erkennen kann. Daher wird das Aufrufen der Methode in \ App \ User von auth()->user()als Fehler erkannt. Ich habe gerade use Illuminate\Support\Facades\Route;meine Routen hinzugefügt , um einen undefinierten Symbolroutenfehler zu beheben.
Christhofer Natalius

2
Danke dafür. Für mein Setup einfach diable intelephense.diagnostics.undefinedMethodsund intelephense.diagnostics.undefinedTypefunktioniert.
Kamudrikah

laravel-ide-helperDie Warnung wurde behoben. Vielen Dank!
Giovannipds

Muss nur generiert werden, _ide_helper.phpwie in den Dokumenten vorgeschlagen.
Giovannipds

121

Version 1.3.0 hat IMO-Fehler.
Ein Downgrade auf Version 1.2.3 behebt mein Problem.

Ich bin dran

  • Laravel 5.1
  • PHP 5.6.40

Downgrade auf Version 1.2.3


3
Ja, ich denke das ist die beste Antwort, das Problem ist die neue Version
Adrian Edy Pratama

Ja! Ich hatte genau das gleiche Problem, das vor einer Stunde begann, als Intelephense auf 1.3.0 aktualisiert wurde - ein Downgrade auf 1.2.3 hat es behoben.
Leo

1
Auch für mich. Ich arbeite an einem Projekt in PHP 5.3.3. Einmal 1.3 wurde überall Fehler installiert. Das Einstellen der PHP-Version auf 5.3.3 in der Intelephense-Erweiterungseinstellung ("intelephense.environment.phpVersion": "5.3.3") hat nichts bewirkt. Das Zurücksetzen auf 1.2.3 hat das Problem behoben.
Ben

2
@ Alex Es gibt andere Probleme. Sie werden Fehler für Abfragebereiche usw. erhalten. Dies sind nicht nur Fassaden.
Miloslav Milo Janoušek

2
Intelephense 1.3.3 fügt weitere Konfigurationsoptionen hinzu, die Ihrem Arbeitsbereich und Codierungsstil entsprechen. Jede Kategorie undefinierter Diagnosen kann jetzt entsprechend aktiviert / deaktiviert werden.
Bmewburn

19

Sie müssen kein Downgrade durchführen, das Sie können:

Deaktivieren Sie entweder die Diagnose undefinierter Symbole in den Einstellungen - "intelephense.diagnostics.undefinedSymbols": false.

Oder verwenden Sie einen ide-Helfer, der Stummel für Laravel-Fassaden hinzufügt. Siehe https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper löst die Probleme mit der Sperrung von Routen oder anderen Sperrungen, aber Sie werden auf andere Fehler stoßen, wenn Sie beredte Bereiche usw. verwenden.
Miloslav Milo Janoušek

3
Um ein Problem zu lösen, müssen wir die echte Diagnose verlieren. Auf keinen Fall Josei!
Carlos Mora

Ich habe IDE Helper installiert und die Datei gemäß den Anweisungen generiert. Dies ist ein Laravel-Projekt. Es schien nichts zu ändern und hatte überall noch undefinierte Symbole. Also habe ich auf
5.2.3

15
use Illuminate\Support\Facades\Route;

Warnung Wird nach dem Importieren des entsprechenden Namespace nicht angezeigt.

Versionen

  • Larvel 6+
  • vscode version 1.40.2
  • PHP Intelephense 1.3.1

Dies löst tatsächlich das Problem. Für Befehle in console.php funktioniert es auch mit: use Illuminate \ Support \ Facades \ Artisan;
Alex

Dies wird nicht empfohlen. laravel-ide-helperKonfiguration ist.
Giovannipds

Das Hinzufügen dieses Problems löste das Problem für Route, aber ich hatte den gleichen Fehler für Auth, also fügte ich auch hinzu use Illuminate\Support\Facades\Auth;. Problem gelöst.
Daydah

13

1.3.1 hat es behoben.

Aktualisieren Sie einfach Ihre Erweiterung und Sie sollten bereit sein


22
Ich bin bereits auf v1.3.1, aber der Fehler wird immer wieder angezeigt.
Ultrasamad

Ich auch, gibt es eine Lösung oder sollten wir ein Downgrade durchführen?
Tonix

3
Für mich löst es nichts. Zurück zu 1.2.3 geht gut!
Carlos Mora

1
1.3.1 hat immer noch dieses Problem für mich. 1.2.3 behoben
NULL Zeiger

2
Ich bin auf 1.3.2 und immer noch NICHT behoben. Neu auf 1.2.3 herabgestuft.
Alex

12

Diese Lösung kann Ihnen helfen, wenn Sie wissen, dass Ihre Probleme auf Fassaden beschränkt sind und Sie Laravel 5.5 oder höher ausführen.

Installieren Sie den Laravel-Ide-Helfer

composer require --dev barryvdh/laravel-ide-helper

Fügen Sie diese bedingte Anweisung in Ihre hinzu AppServiceProvider, um die Hilfsklasse zu registrieren.

public function register()
{
    if ($this->app->environment() !== 'production') {
        $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
    // ...
}

Führen Sie php artisan ide-helper:generatedann eine Datei aus, um der IDE das Verständnis von Fassaden zu erleichtern. Sie müssen Visual Studio Code neu starten.

Verweise

https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/16

https://github.com/barryvdh/laravel-ide-helper


1
Das Problem dabei ist, dass Sie doppelte Definitionen erhalten
Carlos Mora

@ CarlosMora scheint mir nicht. Ich habe nicht verstanden, was du
meinst

Ich benutze Laravel 6.x und es funktioniert.
Hakiko

Laravel 7 funktioniert auch
alfian5229

Intelephense hörte auf zu markieren, Authnachdem ich VS Code neu gestartet hatte. Ich habe genau die in dieser Antwort gezeigten Schritte ausgeführt. Geben Sie VS Code nach dem Neustart ein oder zwei Minuten, und die Fehler sollten behoben sein.
agm1984 vor

6

Dies ist wirklich eine Reihe von Konfigurationen, mit denen Ihr Editor Laravel verstehen kann.

Wenn Sie alles manuell konfigurieren möchten, finden Sie hier das Repo . Dies gilt sowohl für VS-Code als auch für PhpStorm.

Wenn Sie möchten, können Sie dieses Paket herunterladen . (Ich habe es erstellt) Es wird empfohlen, es global zu installieren.

Und dann einfach rennen andylaravel setupIDE. Dadurch wird alles für Sie gemäß dem Faust-Repo konfiguriert.


5

Nein, die Fehler treten erst auf, nachdem die Intelephense-Erweiterung automatisch aktualisiert wurde.

Um das Problem zu lösen, können Sie ein Downgrade auf die vorherige Version durchführen, indem Sie in der Intelephense-Erweiterung auf "Andere Version installieren" klicken. Es gibt keine Fehler in Version 1.2.3.


1
Ein Downgrade auf 1.2.3 löste das Problem.
Julitillo

2

Wenn dies unmittelbar nach dem Hinzufügen einer neuen Vendor-Klasse angezeigt wird, führen Sie unbedingt den Befehl VScode (control-shift-P) aus. Index Workspace


1

Hier habe ich gelöst:

Öffnen Sie die Erweiterungseinstellungen:

Geben Sie hier die Bildbeschreibung ein

Suchen Sie nach der Variablen, die Sie ändern möchten, und deaktivieren / deaktivieren Sie sie

Geben Sie hier die Bildbeschreibung ein

Die Variablen, die Sie berücksichtigen sollten, sind:

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables

1

Zu denen würde es vorziehen, es einfach, dumm zu halten; Wenn Sie die Hinweise lieber entfernen möchten, anstatt einen Helfer zu installieren oder ein Downgrade durchzuführen, deaktivieren Sie einfach den Fehler in Ihrem, settings.jsonindem Sie Folgendes hinzufügen:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 behoben. Aktualisieren Sie einfach Ihre Erweiterung.


nicht nur aktualisieren, sondern Sie müssen einige Funktionen deaktivieren, wie die Antwort von @bmewburn
Adrian Edy Pratama

0

Ich hatte das gleiche Problem und das Folgende schien das Problem angesprochen zu haben.

a) Auf die neueste Version 1.3.5 aktualisiert und alle Diagnoseeinstellungen wieder aktiviert.

Ich bekam immer noch die Nachrichten

b) Der Lieferantenordner mit den abhängigen Bibliotheken wurde zum Arbeitsbereich hinzugefügt

Dies scheint das Problem gelöst zu haben.


Sie könnten verwendenlaravel-ide-helper
giovannipds

Danke für den Tipp. Ich verwende Symfony in Drupal. Würde Laravel-Ide-Helfer helfen?
Anoopjohn

0

Für alle, die diese Probleme durchlaufen und sich nicht sicher sind, ob sie eine ganze Reihe von Überprüfungen deaktivieren möchten , gibt es eine Möglichkeit, Ihre eigenen benutzerdefinierten Signaturen an Intelephense zu übergeben (ich verwende VSCode, aber es sollte für Visual Studio Code genauso funktionieren).

Aus dem Kommentar von Intelephese Repo (von @KapitanOczywisty) kopiert:
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Für einen einzelnen Arbeitsbereich ist es sehr einfach, eine .phpDatei mit allen Signaturen zu erstellen, und Intelephense indiziert sie.

Wenn Sie Stubs global hinzufügen möchten, können Sie dies trotzdem, aber ich bin mir nicht sicher, ob es sich um eine beabsichtigte Funktion handelt . Selbst wenn eine intelephense.stubsWarnung vor einem falschen Wert ausgegeben wird, können Sie dort tatsächlich einen beliebigen Ordnernamen eingeben.

{   
   "intelephense.stubs": [
       // ...
       "/path/to/your/stub"   
   ] 
} 

Hinweis: Stubs werden mit dieser Einstellungsänderung aktualisiert.

Sie können sich integrierte Stubs hier ansehen: https://github.com/JetBrains/phpstorm-stubs

In meinem Fall musste ich dspec ist describe, beforeEach, it... nicht als Fehler markiert zu tun, so dass ich eingeschlossen nur die Datei mit den Signaturen /directories_and_paths/app/vendor/bin/dspecin meinen VSCode Arbeitsbereich Einstellungen, die die Funktionsdeklarationen hatten ich brauchte:

function describe($description = null, \Closure $closure = null) {
}

function it($description, \Closure $closure) {
}

// ... and so on
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.