Mã Visual Studio PHP Intelephense Keep Hiển thị Lỗi không cần thiết


142

Sau bản cập nhật mới nhất của PHP Intelephense mà tôi nhận được hôm nay, intelephense tiếp tục hiển thị lỗi cho một biểu tượng không xác định cho tuyến đường của tôi (và cả lớp khác nữa), không có lỗi như thế này trước đây và nó làm phiền tôi.

Đây là ảnh chụp màn hình lỗi:

nhập mô tả hình ảnh ở đây

Và đây là mã của tôi:

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

Trên thực tế không có lỗi trong mã này nhưng intelephense tiếp tục hiển thị một lỗi vì vậy có cách nào để khắc phục điều này không?


Tôi đã báo cáo một vấn đề về vấn đề này trong hàng đợi vấn đề của ứng dụng - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn 13/12/19

Nếu bạn đang gặp lỗi không xác định trên Tuyến trong bạn api.php, hãy xem câu trả lời của @ user12483351 bên dưới. Điều đó đã sửa nó cho tôi. Tôi đang dùng Intelephese 1.3.6.
dotNET

Câu trả lời:


103

Intelephense 1.3 đã thêm loại không xác định, chức năng, hằng số, hằng số lớp, phương pháp và chẩn đoán thuộc tính, trong đó trước đây trong 1.2 chỉ có chẩn đoán biến không xác định.

Một số khung được viết theo cách cung cấp các phím tắt thuận tiện cho người dùng nhưng gây khó khăn cho các công cụ phân tích tĩnh để phát hiện các biểu tượng có sẵn trong thời gian chạy.

Các trình tạo sơ khai như https://github.com/barryvdh/laravel-ide-helper giúp lấp đầy khoảng trống ở đây và sử dụng điều này với Laravel sẽ xử lý nhiều chẩn đoán sai bằng cách cung cấp các định nghĩa cụ thể về các ký hiệu có thể dễ dàng phát hiện.

Tuy nhiên, PHP là một ngôn ngữ rất linh hoạt và có thể có các trường hợp khác của các ký hiệu không xác định sai tùy thuộc vào cách viết mã. Vì lý do này, kể từ 1.3.3, intelephense có các tùy chọn cấu hình để bật / tắt từng loại biểu tượng không xác định để phù hợp với không gian làm việc và kiểu mã hóa.

Các tùy chọn này là: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Đặt tất cả những điều này thành sai ngoại trừ intelephense.diagnostics.undefinedVariablessẽ cho hành vi phiên bản 1.2. Xem UI cài đặt VSCode và tìm kiếm intelephense.


Đã qua vài ngày với các cảnh báo khó chịu, bây giờ với bản cập nhật 1.3.3 gần đây - mọi thứ đều ổn .. Cảm ơn @bmewburn
Tariqul Hồi giáo

1
Cảm ơn về cấu hình riêng biệt, hiện tại tôi đã vô hiệu hóa undetMethods vì intelephense không thể phát hiện trình trợ giúp laravel auth()->user()là class \ App \ User nên phương thức gọi trong \ App \ User từ đó auth()->user()sẽ bị phát hiện là lỗi. Tôi chỉ thêm use Illuminate\Support\Facades\Route;vào các tuyến đường của mình để sửa lỗi tuyến đường biểu tượng không xác định.
Christhofer Natalius

2
Cám ơn vì cái này. Đối với thiết lập của tôi, chỉ cần bổ sung intelephense.diagnostics.undefinedMethodsintelephense.diagnostics.undefinedTypelàm việc.
kamudrikah

laravel-ide-helperĐã sửa lỗi cảnh báo. Cảm ơn bạn!
giovannipds

Chỉ cần để tạo _ide_helper.phpnhư được đề xuất trên tài liệu.
giovannipds

121

Phiên bản 1.3.0 có lỗ hổng IMO.
Hạ cấp xuống phiên bản 1.2.3 khắc phục sự cố của tôi.

Tôi đang trên

  • Ấu trùng 5.1
  • PHP 5.6.40

Hạ cấp xuống phiên bản 1.2.3


3
Vâng, tôi nghĩ rằng đây là câu trả lời tốt nhất, vấn đề là phiên bản mới
Adrian Edy Pratama

Đúng! Tôi đã có chính xác vấn đề tương tự, bắt đầu từ một giờ trước khi Intelephense được cập nhật lên 1.3.0 - hạ cấp xuống 1.2.3.
leo

1
Tương tự cho tôi. Tôi đang làm việc trên một dự án trong PHP 5.3.3. Khi 1.3 đã được cài đặt lỗi ở khắp mọi nơi. Đặt phiên bản PHP thành 5.3.3 trong cài đặt tiện ích mở rộng Intelephense ("intelephense.en môi.phpVersion": "5.3.3") không làm gì cả. Trở lại 1.2.3 đã sửa nó.
Bến

2
@Alex Có những vấn đề khác. Bạn sẽ nhận được lỗi cho phạm vi truy vấn, vv Đây không chỉ là mặt tiền.
Miloslav Milo Janoušek

2
Intelephense 1.3.3 bổ sung thêm các tùy chọn cấu hình để phù hợp với không gian làm việc và phong cách mã hóa của bạn. Mỗi loại chẩn đoán không xác định có thể được bật / tắt cho phù hợp.
bmewburn

19

Bạn không cần hạ cấp bạn có thể:

Hoặc vô hiệu hóa chẩn đoán ký hiệu không xác định trong cài đặt - "intelephense.diagnostics.und xácSymbols": false.

Hoặc sử dụng một người trợ giúp ide có thêm cuống cho mặt tiền laravel. Xem https://github.com/barryvdh/laravel-ide-helper


3
IDE Helper giải quyết các vấn đề với việc đóng Tuyến đường hoặc các lần đóng cửa khác, nhưng bạn sẽ gặp phải các lỗi khác trong khi sử dụng phạm vi hùng hồn, v.v.
Miloslav Milo Janoušek

3
Vì vậy, để giải quyết một vấn đề chúng ta cần phải mất đi chẩn đoán thực sự. Không đời nào Josei!
Carlos Mora

Tôi đã cài đặt IDE Helper và tạo tệp theo hướng dẫn .. đây là một dự án của Laravel. Nó dường như không thay đổi gì và vẫn có những biểu tượng không xác định ở khắp mọi nơi. Vì vậy, tôi đã hạ cấp xuống 1.2.3
vesperknight

15
use Illuminate\Support\Facades\Route;

Cảnh báo biến mất sau khi nhập không gian tên tương ứng.

Phiên bản

  • Ấu trùng 6+
  • phiên bản vscode 1.40.2
  • php intelephense 1.3.1

Điều này thực sự giải quyết vấn đề. Đối với các lệnh bên trong console.php, nó cũng hoạt động với: sử dụng Illuminate \ Support \ Facades \ Artisan;
Alex

Đây không phải là đề nghị. laravel-ide-helpercấu hình là.
giovannipds

Thêm điều này đã giải quyết vấn đề cho Route, nhưng tôi cũng có lỗi tương tự Auth, vì vậy tôi cũng đã thêm vào use Illuminate\Support\Facades\Auth;. Vấn đề được giải quyết.
Daydah

13

1.3.1 đã sửa nó.

Chỉ cần cập nhật tiện ích mở rộng của bạn và bạn sẽ thấy ổn


22
Tôi đã ở trên v1.3.1 nhưng lỗi vẫn hiển thị.
ultrasamad

Tôi cũng vậy, có một sửa chữa hay chúng ta nên hạ cấp?
tonix

3
Đối với tôi nó không giải quyết được gì. Quay trở lại 1.2.3 đi tốt!
Carlos Mora

1
1.3.1 vẫn có vấn đề này đối với tôi. 1.2.3 đã sửa nó
trỏ NULL

2
Tôi đang trên 1.3.2 và vẫn chưa sửa. Hạ cấp xuống 1.2.3.
Alex

12

Giải pháp này có thể giúp bạn nếu bạn biết các vấn đề của mình bị giới hạn ở Mặt tiền và bạn đang chạy Laravel 5.5 trở lên.

Cài đặt laravel-ide-helper

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

Thêm câu lệnh có điều kiện này vào của bạn AppServiceProviderđể đăng ký lớp người trợ giúp.

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

Sau đó chạy php artisan ide-helper:generate để tạo một tệp để giúp IDE hiểu Mặt tiền. Bạn sẽ cần phải khởi động lại Visual Studio Code.

Người giới thiệu

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

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


1
Thử thách với điều này là bạn có được các định nghĩa trùng lặp
Carlos Mora

@CarlosMora dường như không phải với tôi. Tôi không hiểu ý bạn ...
giovannipds

Tôi đang sử dụng laravel 6.x và nó hoạt động.
hakiko

laravel 7 cũng hoạt động
alfian5229

intelephense ngừng tô sáng Authsau khi tôi khởi động lại Mã VS. Tôi đã làm chính xác các bước được hiển thị trong câu trả lời này. Sau khi khởi động lại VS Code, hãy chờ một hoặc hai phút và các lỗi sẽ được xóa.
agm1984

6

Đây thực sự là một bộ cấu hình để trình soạn thảo của bạn hiểu về Laravel.

Nếu bạn muốn cấu hình tất cả bằng tay, đây là repo . Điều này là cho cả mã VS và PhpStorm.

Hoặc nếu bạn muốn, bạn có thể tải xuống gói này . (Tôi đã tạo) nên cài đặt nó trên toàn cầu.

Và sau đó chỉ cần chạy andylaravel setupIDE. điều này sẽ cấu hình mọi thứ cho bạn theo repo nắm tay.


5

Không, lỗi chỉ xảy ra sau khi tiện ích mở rộng Intelephense được cập nhật tự động.

Để giải quyết vấn đề, bạn có thể hạ cấp xuống phiên bản trước bằng cách nhấp vào "Cài đặt phiên bản khác" trong tiện ích mở rộng Intelephense. Không có lỗi trên phiên bản 1.2.3.


1
Hạ cấp xuống 1.2.3 đã giải quyết được vấn đề.
Julitillo

2

Nếu bạn thấy điều này ngay lập tức sau khi thêm một lớp Nhà cung cấp mới, hãy chắc chắn chạy lệnh VScode (control-shift-P) Index Workspace


1

Đây là tôi đã giải quyết:

Mở cài đặt tiện ích mở rộng:

nhập mô tả hình ảnh ở đây

Và tìm kiếm biến bạn muốn thay đổi, và bỏ chọn / kiểm tra nó

nhập mô tả hình ảnh ở đây

Các biến bạn nên xem xét là:

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

1

Đối với những người muốn giữ nó đơn giản, ngu ngốc; Nếu bạn muốn thoát khỏi các thông báo thay vì cài đặt một trình trợ giúp hoặc hạ cấp, chỉ cần vô hiệu hóa lỗi trong bạn settings.jsonbằng cách thêm vào đây:

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 đã sửa nó. Chỉ cần cập nhật tiện ích mở rộng của bạn.


không chỉ cập nhật nó mà bạn phải vô hiệu hóa một số tính năng như câu trả lời của @bmewburn đã nói
Adrian Edy Pratama

0

Tôi đã có cùng một vấn đề và sau đây dường như đã giải quyết vấn đề.

a) Cập nhật lên phiên bản mới nhất 1.3.5 và kích hoạt lại tất cả các cài đặt chẩn đoán.

Tôi vẫn nhận được tin nhắn

b) Đã thêm thư mục nhà cung cấp với các thư viện phụ thuộc vào không gian làm việc

Điều này dường như đã giải quyết vấn đề.


Bạn có thể sử dụnglaravel-ide-helper
giovannipds

Cảm ơn vì tiền hỗ trợ. Tôi đang sử dụng Symfony bên trong Drupal. Laravel-ide-helper sẽ giúp đỡ?
anoopjohn

0

Đối với bất kỳ ai gặp phải những vấn đề này và không yên tâm về việc vô hiệu hóa toàn bộ bộ kiểm tra, có một cách để chuyển chữ ký tùy chỉnh của riêng bạn cho Intelephense (tôi sử dụng VSCode, nhưng nó cũng hoạt động tương tự với Visual Studio Code).

Sao chép từ nhận xét của Intelephese (bởi @KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Đối với không gian làm việc duy nhất rất đơn giản, bạn phải tạo .phptệp có tất cả chữ ký và intelephense sẽ lập chỉ mục cho chúng.

Nếu bạn muốn thêm sơ khai trên toàn cầu, bạn vẫn có thể, nhưng tôi không chắc đó có phải là tính năng dự định hay không . Ngay cả khi intelephense.stubsném cảnh báo về giá trị không chính xác, trên thực tế bạn có thể đặt bất kỳ tên thư mục nào .

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

Lưu ý: sơ khai được làm mới với thay đổi cài đặt này.

Bạn có thể xem sơ khai tích hợp tại đây: https://github.com/JetBrains/phpstorm-stub

Trong trường hợp của tôi, tôi cần của dspec describe, beforeEach, it... để không được đánh dấu như sai sót, vì vậy tôi chỉ bao gồm các tập tin có chữ ký /directories_and_paths/app/vendor/bin/dspectrong cài đặt không gian làm việc VSCode của tôi, trong đó có tờ khai chức năng tôi cần:

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

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

// ... and so on
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.