Visual Studio Code PHP Intelephense가 필요하지 않은 오류를 계속 표시


142

오늘 내가 얻는 PHP Intelephense의 최신 업데이트 이후, 인텔 텔레 펜스는 내 경로 (및 다른 클래스)에 대해 정의되지 않은 기호에 대한 오류를 계속 표시합니다. 이전과 같은 오류는 없으며 귀찮게합니다.

다음은 오류 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

그리고 이것은 내 코드입니다.

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');
});

실제로이 코드에는 오류가 없지만 정보가 계속 오류를 표시하므로이 문제를 해결할 수있는 방법이 있습니까?


나는 응용 프로그램의 문제 큐에서 이에 대한 문제를보고 - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

의 Route에서 정의되지 않은 오류가 발생하면 api.php아래 @ user12483351의 답변을 참조하십시오. 그것은 나를 위해 그것을 고쳤다. 나는 Intelephese 1.3.6에 있습니다.
dotNET

답변:


103

Intelephense 1.3에는 정의되지 않은 유형, 함수, 상수, 클래스 상수, 메서드 및 속성 진단이 추가되었으며 이전에는 1.2에서 정의되지 않은 변수 진단 만있었습니다.

일부 프레임 워크는 사용자에게 편리한 바로 가기를 제공하는 방식으로 작성되었지만 정적 분석 엔진이 런타임시 사용 가능한 기호를 발견하기 어렵습니다.

https://github.com/barryvdh/laravel-ide-helper 와 같은 스텁 생성기는 여기의 차이를 메우는 데 도움이되며이를 Laravel과 함께 사용하면 쉽게 발견 할 수있는 기호에 대한 구체적인 정의를 제공함으로써 많은 잘못된 진단을 처리 할 수 ​​있습니다.

여전히 PHP는 매우 유연한 언어이며 코드 작성 방법에 따라 다른 정의되지 않은 기호가있을 수 있습니다. 이러한 이유로, 1.3.3부터 인텔리전스에는 작업 공간 및 코딩 스타일에 맞게 정의되지 않은 기호의 각 범주를 활성화 / 비활성화하는 구성 옵션이 있습니다.

이러한 옵션은 다음과 같습니다. intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

intelephense.diagnostics.undefinedVariables버전 1.2 동작을 제외하고 이들 모두를 false로 설정하면 VSCode 설정 UI를 참조하여를 검색하십시오 intelephense.


성가신 경고와 함께 며칠이 지났으며, 최근 업데이트 1.3.3이되었습니다. 모든 것이 정상입니다. 감사합니다 @bmewburn
Tariqul Islam

1
별도의 구성에 감사드립니다. 지금은 intelephense가 auth()->user()\ App \ User 클래스로 라 라벨 도우미 를 감지 할 수 없으므로 \ App \ User 내부의 호출 메소드 auth()->user()가 오류로 감지 되므로 undefinedMethods를 비활성화했습니다 . use Illuminate\Support\Facades\Route;정의되지 않은 기호 경로 오류를 수정하기 위해 경로에 방금 추가 했습니다.
Christhofer Natalius

2
고마워 내 설정의 경우, 그냥 가능 intelephense.diagnostics.undefinedMethods하고 intelephense.diagnostics.undefinedType작동합니다.
kamudrikah '16

laravel-ide-helper경고를 수정했습니다. 감사합니다!
giovannipds

_ide_helper.php문서에서 제안한대로 를 생성해야 했습니다.
giovannipds

121

버전 1.3.0에는 결함 IMO가 있습니다.
버전 1.2.3으로 다운 그레이드하면 문제가 해결됩니다.

나는

  • 라 라벨 5.1
  • PHP 5.6.40

버전 1.2.3으로 다운 그레이드


3
그래, 나는 이것이 가장 좋은 대답이라고 생각, 문제는 새 버전입니다
아드리안 에디 Pratama는

예! Intelephense가 1.3.0으로 업데이트되면서 1 시간 전에 시작된 것과 동일한 문제가 발생했습니다. 1.2.3으로 다운 그레이드했습니다.
leo

1
저도 마찬가지입니다. PHP 5.3.3에서 프로젝트를 진행 중입니다. 일단 1.3이 모든 곳에 설치되었습니다. Intelephense 확장 설정 ( "intelephense.environment.phpVersion": "5.3.3")에서 PHP 버전을 5.3.3으로 설정해도 아무런 작업이 수행되지 않습니다. 다시 1.2.3으로 되돌려 고정했습니다.
Ben

2
@Alex 다른 문제가 있습니다. 쿼리 범위 등에 대한 오류가 발생합니다. 이는 단지 파사드가 아닙니다.
Miloslav Milo Janoušek

2
Intelephense 1.3.3은 작업 공간 및 코딩 스타일에 맞게 추가 구성 옵션을 추가합니다. 정의되지 않은 진단의 각 범주는 이제 적합하게 활성화 / 비활성화 될 수 있습니다.
bmewburn

19

다운 그레이드 할 필요는 없습니다.

설정에서 정의되지 않은 기호 진단을 비활성화하거나 "intelephense.diagnostics.undefinedSymbols": false입니다.

또는 라 라벨 파사드에 대한 스터브를 추가하는 ide 도우미를 사용하십시오. 참조 https://github.com/barryvdh/laravel-ide-helper를


3
IDE 도우미 경로의 폐쇄 또는 다른 클로저 문제를 해결하지 않습니다,하지만 당신은 설득력 범위 등을 사용하는 동안 다른 오류에 걸쳐 실행
Miloslav 마일로 Janoušek

3
따라서 문제를 해결하려면 실제 진단을 풀어야합니다. 안돼요!
Carlos Mora

IDE Helper를 설치하고 지침에 따라 파일을 생성했습니다. 이것은 Laravel 프로젝트에 있습니다. 그것은 아무것도 변하지 않는 것처럼 보였으며 여전히 모든 곳에서 정의되지 않은 기호를 가지고있었습니다. 그래서 1.2.3로 다운 그레이드
vesperknight

15
use Illuminate\Support\Facades\Route;

경고 해당 네임 스페이스를 가져온 후 사라졌습니다.

버전

  • Larvel 6+
  • vscode 버전 1.40.2
  • PHP 정보 1.3.1

이것은 실제로 문제를 해결합니다. console.php 내부의 명령은 다음과 같이 작동합니다 : use Illuminate \ Support \ Facades \ Artisan;
Alex

이것은 권장되지 않습니다. laravel-ide-helper구성입니다.
giovannipds

이것을 추가하면에 대한 문제가 해결 Route되었지만에 대해 동일한 오류가 발생하여 Auth추가 use Illuminate\Support\Facades\Auth;했습니다. 문제 해결됨.
Daydah

13

1.3.1 고정.

확장 프로그램을 업데이트하기 만하면됩니다.


22
이미 v1.3.1을 사용하고 있지만 오류가 계속 표시됩니다.
ultrasamad

나도 수정이 있습니까? 아니면 다운 그레이드해야합니까?
tonix

3
나를 위해 그것은 아무것도 해결하지 않습니다. 1.2.3으로 돌아가는 것이 좋습니다!
Carlos Mora

1
1.3.1 여전히이 문제가 있습니다. 1.2.3 고정
NULL 포인터

2
나는 1.3.2에 있고 여전히 고정되어 있지 않습니다. 1.2.3으로 다시 다운 그레이드되었습니다.
Alex

12

이 솔루션은 문제가 Facades로 제한되어 있고 Laravel 5.5 이상을 실행중인 경우 도움이 될 수 있습니다.

laravel-ide-helper 설치

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

AppServiceProvider헬퍼 클래스를 등록하려면 이 조건문을 추가하십시오 .

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

그런 다음 php artisan ide-helper:generateIDE가 Facades를 이해하는 데 도움이되는 파일을 생성하기 위해 실행 하십시오. Visual Studio Code를 다시 시작해야합니다.

참고 문헌

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

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


1
이에 대한 조사는 중복 된 정의를 얻는 것입니다
Carlos Mora

@CarlosMora는 나에게 보이지 않는 것 같습니다. 나는 당신이 의미하는 바를 얻지 못했습니다 ...
giovannipds

laravel 6.x를 사용하고 있으며 작동합니다.
hakiko

laravel 7도 작동
alfian5229

AuthVS 코드를 다시 시작한 후 intelephense가 강조 표시 를 중단했습니다 . 이 답변에 표시된 단계를 정확하게 수행했습니다. VS 코드를 다시 시작한 후 1-2 분 정도 걸리면 오류가 사라집니다.
agm1984

6

이것은 에디터가 라 라벨을 이해하기위한 설정입니다.

모두 수동으로 구성하려면 여기에 repo가 있습니다. 이것은 VS 코드와 PhpStorm 모두를위한 것입니다.

또는 원하는 경우이 패키지를 다운로드 할 수 있습니다 . 전 세계적으로 설치하는 것이 좋습니다.

그런 다음 실행하십시오 andylaravel setupIDE. 이것은 주먹 저장소에 따라 모든 것을 구성합니다.


5

아니요, 오류는 Intelephense 확장이 자동으로 업데이트 된 후에 만 ​​발생합니다.

이 문제를 해결하려면 Intelephense 확장에서 "다른 버전 설치"를 클릭하여 이전 버전으로 다운 그레이드 할 수 있습니다. 버전 1.2.3에는 오류가 없습니다.


1
1.2.3으로 다운 그레이드하면 문제가 해결되었습니다.
Julitillo

2

새 공급 업체 클래스를 추가 한 직후에이 오류가 표시되면 VScode 명령 (control-shift-P)을 실행하십시오. Index Workspace


1

여기 내가 해결되었습니다 :

확장 설정을여십시오 :

여기에 이미지 설명을 입력하십시오

변경하려는 변수를 검색하고 선택 해제 / 확인

여기에 이미지 설명을 입력하십시오

고려해야 할 변수는 다음과 같습니다.

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

1

그 사람들은 단순하고 멍청하게 유지하는 것을 선호 할 것입니다. 도우미를 설치하거나 다운 그레이드하는 대신 통지를 제거하려면 다음 settings.json을 추가 하여 오류를 비활성화하십시오 .

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 고정. 확장 프로그램을 업데이트하십시오.


단지를 업데이트 할 수 있지만 당신은 @bmewburn 대답 한 말 같은 일부 기능을 사용하지 않도록 설정해야합니다
아드리안 에디 Pratama는

0

나는 같은 문제가 있었고 다음과 같은 문제가 해결되었습니다.

a) 최신 버전 1.3.5로 업데이트하고 모든 진단 설정을 다시 활성화했습니다.

나는 아직도 메시지를 받고 있었다

b) 작업 공간에 종속 라이브러리가있는 공급 업체 폴더를 추가했습니다.

이것은 문제를 해결 한 것으로 보입니다.


다음을 사용할 수 있습니다laravel-ide-helper
giovannipds

팁 고마워. Drupal에서 Symfony를 사용하고 있습니다. laravel-ide-helper가 도움이 될까요?
anoopjohn

0

이러한 문제를 겪고 전체 검사 세트를 비활성화하는 것이 불안한 사람은 자신의 사용자 지정 서명을 Intelephense전달 하는 방법이 있습니다 (VSCode를 사용하지만 Visual Studio Code에서도 동일하게 작동합니다).

Intelephese repo의 의견 (@KapitanOczywisty 제공) :
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

단일 작업 공간의 경우 매우 간단 .php합니다. 모든 서명이있는 파일 을 작성해야 하며 인텔리전스가 색인을 생성합니다.

전역 적으로 스텁을 추가하려는 경우 여전히 가능하지만 기능 이 의도 한 것인지 확실하지 않습니다 . intelephense.stubs잘못된 값에 대해 경고를 표시 하더라도 실제로 폴더 이름을 넣을 수 있습니다 .

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

참고 :이 설정 변경으로 스텁이 새로 고쳐집니다.

https://github.com/JetBrains/phpstorm-stubs : 내장 스텁을 살펴볼 수 있습니다

내 경우, 나는 dspec의 필요 describe, beforeEach, it난 그냥 서명 파일 포함 ... 그래서, 오류로 강조하지 않습니다에 /directories_and_paths/app/vendor/bin/dspec내가 필요한 함수 선언을했다 내 VSCode의 작업 공간 설정의를 :

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

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

// ... and so on
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.