Код Visual Studio PHP Intelephense продолжает показывать ненужную ошибку

142

После последнего обновления 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 продолжает показывать ошибку, так есть ли способ исправить это?

Адриан Эди Пратама
источник
Я сообщил об этой проблеме в очереди проблем приложения - 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 имеет параметры конфигурации, позволяющие включать / отключать каждую категорию неопределенного символа в соответствии с рабочим пространством и стилем кодирования.

Эти варианты: 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. См. Пользовательский интерфейс настроек VSCode и выполните поиск intelephense.

bmewburn
источник
Прошло несколько дней с раздражающими оповещениями, теперь с недавним обновлением 1.3.3 - все в порядке .. Спасибо @bmewburn
Tariqul Islam
1
Спасибо за отдельную конфигурацию, сейчас я отключил undefinedMethods, так как intelephense не может обнаружить помощник laravel auth()->user()как класс \ App \ User, поэтому вызов метода внутри \ App \ User from auth()->user()будет обнаружен как ошибка. Я только добавил use Illuminate\Support\Facades\Route;в свои маршруты, чтобы исправить неопределенную ошибку маршрута символа.
Кристофер
2
Спасибо за это. Для моей настройки просто diable intelephense.diagnostics.undefinedMethodsи intelephense.diagnostics.undefinedTypeработает.
Камудриках
laravel-ide-helperисправлено предупреждение. Спасибо!
giovannipds
Просто нужно было сгенерировать, _ide_helper.phpкак предложено в документах.
giovannipds
121

Версия 1.3.0 имеет недостаток IMO.
Переход на версию 1.2.3 решает мою проблему.

Я на

  • Laravel 5.1
  • PHP 5.6.40

Переход на версию 1.2.3

Robin1990
источник
3
Да, я думаю, что это лучший ответ, проблема в новой версии
Адриан Эди
Да! У меня была точно такая же проблема, которая началась час назад, когда Intelephense был обновлен до 1.3.0 - понижение до 1.2.3 исправило ее.
Лев
1
Мне то же. Я работаю над проектом в PHP 5.3.3. Однажды 1.3 везде были установлены ошибки. Установка PHP версии 5.3.3 в настройке расширения Intelephense ("intelephense.environment.phpVersion": "5.3.3") ничего не делала. Возврат к 1.2.3 исправил это.
Бен
2
@ Алекс Есть и другие проблемы. Вы получите ошибки для областей запросов и т. Д. Это не только фасады.
Милослав Мило Яноушек
2
Intelephense 1.3.3 добавляет дополнительные параметры конфигурации в соответствии с вашим рабочим пространством и стилем кодирования. Каждая категория неопределенной диагностики теперь может быть включена / отключена для соответствия.
bmewburn
19

Вам не нужно понижать рейтинг, вы можете:

Либо отключите неопределенную диагностику символов в настройках - "intelephense.diagnostics.undefinedSymbols": false.

Или используйте помощник ide, который добавляет заглушки для фасадов laravel. Смотрите https://github.com/barryvdh/laravel-ide-helper

Начо
источник
3
IDE Helper решает проблемы с закрытием маршрута или другими замыканиями, но вы будете сталкиваться с другими ошибками при использовании красноречивых областей и т. Д.
Милослав Мило Яноушек
3
Таким образом, чтобы решить проблему, нам нужно потерять истинную диагностику. Ни за что, Джозей!
Карлос Мора
Я установил IDE Helper и сгенерировал файл в соответствии с инструкциями .. это на проекте Laravel. Похоже, ничего не изменилось и все еще имел неопределенные символы повсюду. Так что я понизился до 1.2.3
vesperknight
15
use Illuminate\Support\Facades\Route;

Предупреждение Исчезло после импорта соответствующего пространства имен.

Версия-х

  • Larvel 6+
  • vscode версия 1.40.2
  • php intelephense 1.3.1
user12483351
источник
Это на самом деле решает проблему. Для команд внутри console.php он также работает с: use Illuminate \ Support \ Facades \ Artisan;
Алекс
Это не рекомендуется. laravel-ide-helperКонфигурация есть.
giovannipds
Добавление этого решило проблему для Route, но у меня была та же ошибка для Auth, поэтому я также добавил use Illuminate\Support\Facades\Auth;. Задача решена.
Daydah
13

1.3.1 это исправили.

Просто обновите ваше расширение, и вы должны быть готовы

Souljacker
источник
22
Я уже на v1.3.1, но ошибка продолжает показывать.
Ультрасамад
Я тоже, есть ли исправление или мы должны понизить рейтинг?
tonix
3
Для меня это ничего не решает. Переход на 1.2.3 идет нормально!
Карлос Мора
1
1.3.1 все еще имеет эту проблему для меня. 1.2.3 это исправлено
указатель NULL
2
Я на 1.3.2 и до сих пор НЕ исправлена. Пересмотрено до 1.2.3.
Алекс
12

Это решение может помочь вам, если вы знаете, что ваши проблемы касаются только фасадов и вы используете 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:generateчтобы сгенерировать файл, чтобы помочь IDE понять Фасады. Вам нужно будет перезапустить код Visual Studio.

Ссылки

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

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

AC Patrice
источник
1
Проблема в том, что вы получаете дублированные определения
Карлос Мора
@CarlosMora, кажется, не для меня. Я не понял, что вы имели в виду ...
giovannipds
Я использую Laravel 6.x, и он работает.
Хакико
Laravel 7 тоже работает
alfian5229
intelephense перестал подсвечиваться Authпосле перезапуска VS Code. Я сделал именно шаги, показанные в этом ответе. После перезапуска VS Code дайте ему минуту или две, и ошибки должны исчезнуть.
agm1984
6

Это действительно набор настроек для вашего редактора, чтобы понять Laravel.

Если вы хотите настроить все вручную, вот репо . Это для кода VS и PhpStorm.

Или, если вы хотите, вы можете загрузить этот пакет . (Я создал) рекомендуется установить его глобально.

А потом просто беги andylaravel setupIDE. это настроит все для вас в соответствии с первым репо.

Энди Сонг
источник
5

Нет, ошибки возникают только после автоматического обновления расширения Intelephense.

Чтобы решить эту проблему, вы можете понизить ее до предыдущей версии, нажав «Установить другую версию» в расширении Intelephense. На версии 1.2.3 ошибок нет.

exyna
источник
1
Понижение до 1.2.3 решило проблему.
Julitillo
2

Если вы видите это сразу после добавления нового класса Vendor, обязательно запустите команду VScode (control-shift-P) Index Workspace

Snapey
источник
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
Адриан Эдди
0

У меня была та же проблема, и, кажется, следующее решило проблему.

а) Обновлен до последней версии 1.3.5 и повторно активировал все настройки диагностики.

Я все еще получал сообщения

б) Добавлена ​​папка вендора с зависимыми библиотеками в рабочую область

Кажется, это решило проблему.

anoopjohn
источник
Вы можете использоватьlaravel-ide-helper
giovannipds
Спасибо за совет. Я использую Symfony внутри Drupal. Поможет ли laravel-ide-helper?
Anoopjohn
0

Для тех, кто сталкивается с этими проблемами и не хочет отключать весь набор проверок, есть способ передать свои собственные подписи в Intelephense (я использую VSCode, но он должен работать так же для кода Visual Studio).

Скопировано из комментария репо Intelephese (@KapitanOczywisty):
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Для одного рабочего пространства это очень просто, вы должны создать .phpфайл со всеми подписями, и intelephense их проиндексирует.

Если вы хотите добавить заглушки глобально, вы все равно можете это сделать, но я не уверен, предназначена ли эта функция . Даже если 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
jpenna
источник