Visual Studio Code PHP Intelephense 不断显示不必要的错误

Adr*_*ama 199 php laravel visual-studio-code

在我今天获得 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');
});
Run Code Online (Sandbox Code Playgroud)

实际上这段代码没有错误,但是智能电话一直显示错误,所以有没有办法解决这个问题?

bme*_*urn 188

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

将所有这些设置为 false exceptintelephense.diagnostics.undefinedVariables将提供 1.2 版行为。查看 VSCode 设置 UI 并搜索intelephense.

  • 感谢您的单独配置,现在我禁用了 undefinedMethods,因为 intelephense 无法检测 laravel 助手 `auth()->user()` 作为类 \App\User,因此从 `auth()->user 调用 \App\User 内的方法()` 将被检测为错误。我刚刚在我的路线中添加了“use Illuminate\Support\Facades\Route;”来修复未定义的符号路线错误。 (4认同)
  • 谢谢你。对于我的设置,只需禁用“intelephense.diagnostics.undefinedMethods”和“intelephense.diagnostics.undefinedType”即可。 (3认同)
  • 在 VsCode 中按“ctrl+,”。搜索“未定义”并取消选中显示“Intellephense > 诊断”的所有复选框 (3认同)

Rob*_*990 156

版本 1.3.0 有缺陷 IMO。
降级到 1.2.3 版修复了我的问题。

我上线了

  • Laravel 5.1
  • PHP 5.6.40

降级到 1.2.3 版

  • 添加“use Illuminate\Support\Facades\Route;” 会真正解决问题。作为一般规则,对于每个未找到的符号,只需声明适当的外观。 (3认同)
  • @Alex 还有其他问题。你会得到查询范围等的错误。这不仅仅是外观。 (2认同)
  • Intelephense 1.3.3 添加了更多配置选项以适合您的工作空间和编码风格。现在可以启用/禁用每个类别的未定义诊断以适应需要。 (2认同)

小智 34

use Illuminate\Support\Facades\Route;
Run Code Online (Sandbox Code Playgroud)

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

版本的

  • 幼虫 6+
  • vscode 版本 1.40.2
  • php 电话 1.3.1

  • 添加此解决了“Route”的问题,但我对“Auth”遇到了相同的错误,因此我还添加了“use Illuminate\Support\Facades\Auth;”。问题解决了。 (2认同)

Hef*_*Hef 25

就我而言,我必须强制Intelephense对工作区建立索引。这是我的做法,在VsCode

ctrl + shift + p>Intelephense: Index workspace


Nac*_*cho 23

您无需降级即可:

在设置中禁用未定义​​的符号诊断 - "intelephense.diagnostics.undefinedSymbols": false 。

或者使用 ide 助手为 laravel 外观添加存根。见https://github.com/barryvdh/laravel-ide-helper

  • 因此,为了解决问题,我们需要放弃真正的诊断。不可能的乔西! (5认同)
  • IDE Helper 确实解决了 Route 闭包或其他闭包的问题,​​但是在使用 eloquent 作用域等时您会遇到其他错误。 (3认同)

Pat*_*rex 17

如果您知道您的问题仅限于 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);
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后运行php artisan ide-helper:generate生成一个文件,帮助IDE理解Facades。您将需要重新启动 Visual Studio Code。

参考

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

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

  • 问题是你得到了重复的定义 (2认同)

Que*_*ium 17

从1.7.1版本开始还有其他解决方案(2021-05-02)

您现在可以知道 intelephense 应该在哪里寻找依赖项,例如最常见的供应商。

"intelephense.environment.includePaths": [
    "vendor"
],
Run Code Online (Sandbox Code Playgroud)

此外,它甚至绕过了 VSCode 规则

"files.exclude": {
    "**/vendor": true
},
Run Code Online (Sandbox Code Playgroud)

您可以在此处的变更日志中阅读更多内容

  • 您可以在 settings.json 文件中添加这些规则。按 F1 并查找“打开用户设置 (JSON)” (3认同)

Sou*_*ker 15

1.3.1 修复它。

只需更新您的扩展程序,您就可以开始使用了

  • 对我来说这并不能解决任何问题。返回 1.2.3 没问题! (4认同)
  • 我使用的是 1.3.2,但仍未修复。重新降级至1.2.3。 (2认同)

rog*_*ila 11

就我而言,出于某种原因,vendorVS Code 设置中禁用了文件夹:

    "intelephense.files.exclude": [
        "**/.git/**",
        "**/.svn/**",
        "**/.hg/**",
        "**/CVS/**",
        "**/.DS_Store/**",
        "**/node_modules/**",
        "**/bower_components/**",
        "**/vendor/**", <-- remove this line!
        "**/resources/views/**"
    ],
Run Code Online (Sandbox Code Playgroud)

通过删除包含vendor文件夹的行,它可以在 Intelephense 1.5.4 版上正常工作

  • 我还必须删除 `"**/vendor/**/{Tests,tests}/**",` ;不知道那条线是怎么进去的。 (3认同)
  • 我做了同样的事情,但仍然出现错误 (3认同)

Sna*_*pey 9

如果您在添加新的 Vendor 类后立即看到此信息,请务必运行 VScode 命令 (control-shift-P) Index Workspace

  • 刚刚找到我自己的评论来回答我的问题!我已经忘记这个了.. (4认同)
  • 这似乎有效,但下次我编辑并保存文件时它又出现了。:-( (2认同)

Eli*_*iss 7

这是我解决的:

打开扩展设置:

在此处输入图片说明

并搜索您要更改的变量,并取消选中/选中它

在此处输入图片说明

您应该考虑的变量是:

intelephense.diagnostics.undefinedTypes 
intelephense.diagnostics.undefinedFunctions         
intelephense.diagnostics.undefinedConstants         
intelephense.diagnostics.undefinedClassConstants 
intelephense.diagnostics.undefinedMethods 
intelephense.diagnostics.undefinedProperties 
intelephense.diagnostics.undefinedVariables
Run Code Online (Sandbox Code Playgroud)


Con*_*hol 7

对于那些宁愿保持简单、愚蠢的人;如果您宁愿摆脱通知而不是安装帮助程序或降级,只需settings.json通过添加以下内容来禁用您的错误:

"intelephense.diagnostics.undefinedTypes": false
Run Code Online (Sandbox Code Playgroud)


And*_*ong 6

这真的是一组配置,让你的编辑器了解 Laravel。

如果你想手动配置它,这里是repo。这适用于 VS 代码和 PhpStorm。

或者如果你愿意,你可以下载这个。(我创建的)建议全局安装它。

然后就跑andylaravel setupIDE。这将根据 fist repo 为您配置一切。


小智 5

不,只有在 Intelephense 扩展自动更新后才会出现错误。

要解决此问题,您可以通过单击 Intelephense 扩展中的“安装另一个版本”将其降级到以前的版本。版本 1.2.3 上没有错误。


ODe*_*lta 5

我希望这对任何人都有帮助。我经常使用它。这将使您的 vscode “重新启动”,而无需实际重新启动。此过程的一部分将使您的插件更新其缓存索引。cmd+shift+p或者ctrl+shift+p

在此输入图像描述