在我今天得到的PHP Intelephense的最新更新之后,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');
});

实际上,这段代码中没有错误,但intelephense一直显示错误,所以有办法解决这个问题吗?


当前回答

在v1.7.1中也有同样的问题。它在内置函数上显示错误。但刚刚发现解决方案:去扩展设置@ext:bmewburn。vcode - Intelephense -client并逐个禁用Intelephense›Diagnostics:您将看到错误显示将停止。

其他回答

我最近解决了自己的问题。通过文件>首选项 我在寻找智慧 有文件的部分被排除了,我注意到供应商文件夹被添加了。 我把它删除了,现在我所有的laravel文件都有索引了

 use Illuminate\Support\Facades\Route;

添加上述命名空间

Intelephense 1.3增加了未定义的类型、函数、常量、类常量、方法和属性诊断,而之前在1.2中只有未定义的变量诊断。

一些框架的编写方式为用户提供了方便的快捷方式,但使得静态分析引擎很难发现运行时可用的符号。

像https://github.com/barryvdh/laravel-ide-helper这样的存根生成器有助于填补这里的空白,并且通过提供易于发现的符号的具体定义,将其与Laravel一起使用将解决许多错误诊断问题。

不过,PHP是一种非常灵活的语言,根据代码的编写方式,可能会出现其他错误的未定义符号。因此,从1.3.3开始,intelephense有配置选项来启用/禁用每一类未定义符号,以适应工作空间和编码风格。

这些选项是: 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设置界面并搜索intelephense。

我也有同样的问题,下面的内容似乎已经解决了这个问题。

a)更新至最新版本1.3.5,并重新启用所有诊断设置。

我还在接收信息

b)将带有依赖库的vendor文件夹添加到工作区

这似乎解决了问题。

use Illuminate\Support\Facades\Route;

警告导入相应的命名空间后消失。

版本的

幼虫 6+ VSCODE 版本 1.40.2 PHP Intelephense 1.3.1