Visual Studio Code PHP Intelephense Gerekli Hata Gösterilmeye Devam Ediyor


142

Bugün aldığım PHP Intelephense'in en son güncellemesinden sonra, intelephense, rotam (ve diğer sınıflar) için tanımlanmamış bir sembol için bir hata göstermeye devam ediyor, daha önce böyle bir hata yok ve beni rahatsız ediyor.

İşte hata ekran görüntüsü:

resim açıklamasını buraya girin

Ve bu benim kodum:

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

Aslında bu kodda bir hata yok ama intelephense bir hata göstermeye devam ediyor, bu yüzden bunu düzeltmenin bir yolu var mı?


Bu konuda başvurunun sorun sırasında bir sorun bildirdim - github.com/bmewburn/vscode-intelephense/issues/885
anoopjohn

api.phpBilgisayarınızdaki Rota'da tanımlanmamış bir hata alıyorsanız, aşağıdaki @ user12483351'in cevabına bakın. Bu benim için sorunumu çözdü. Intelephese 1.3.6 kullanıyorum.
dotNET

Yanıtlar:


103

Intelephense 1.3, tanımlanmamış tip, işlev, sabit, sınıf sabiti, yöntem ve özellik tanılamaları ekledi; daha önce 1.2'de yalnızca tanımlanmamış değişken tanılamalar vardı.

Bazı çerçeveler, kullanıcı için uygun kısayollar sağlayacak, ancak statik analiz motorlarının çalışma zamanında kullanılabilen sembolleri bulmasını zorlaştıracak şekilde yazılmıştır.

Https://github.com/barryvdh/laravel-ide-helper gibi saplama jeneratörleri buradaki boşluğu doldurmaya yardımcı olur ve bunu Laravel ile kullanmak, kolayca keşfedilebilen sembollerin somut tanımlarını sağlayarak yanlış teşhislerin çoğunu halleder.

Yine de, PHP çok esnek bir dildir ve kodun nasıl yazıldığına bağlı olarak yanlış tanımlanmamış sembollerin başka örnekleri de olabilir. Bu nedenle, 1.3.3'ten beri intelephense, tanımlanmamış sembollerin her kategorisini çalışma alanına ve kodlama stiline uyacak şekilde etkinleştirmek / devre dışı bırakmak için yapılandırma seçeneklerine sahiptir.

Bu seçenekler: intelephense.diagnostics.undefinedTypes intelephense.diagnostics.undefinedFunctions intelephense.diagnostics.undefinedConstants intelephense.diagnostics.undefinedClassConstants intelephense.diagnostics.undefinedMethods intelephense.diagnostics.undefinedProperties intelephense.diagnostics.undefinedVariables

Bunların dışında false olarak ayarlanması intelephense.diagnostics.undefinedVariablessürüm 1.2 davranışı verecektir. VSCode ayarları kullanıcı arayüzüne bakın ve arayın intelephense.


Can sıkıcı uyarılar ile birkaç gün geçti, şimdi son güncelleme 1.3.3 ile - her şey yolunda .. Thanks @bmewburn
Tariqul Islam

1
Ayrı yapılandırma için teşekkürler, şimdilik undefinedMethods'u devre dışı bıraktım çünkü intelephense laravel yardımcısını auth()->user()class \ App \ User olarak algılayamıyor, bu yüzden \ App \ User içindeki çağrı yöntemi auth()->user()hata olarak algılanacak. use Illuminate\Support\Facades\Route;Tanımsız sembol güzergah hatasını düzeltmek için rotalarıma yeni ekledim .
Christhofer Natalius

2
Bunun için teşekkürler. Benim kurulum için, sadece diable intelephense.diagnostics.undefinedMethodsve intelephense.diagnostics.undefinedTypeçalışır.
kamudrikah

laravel-ide-helperuyarıyı düzeltti. Teşekkür ederim!
giovannipds

Sadece _ide_helper.phpdokümanlarda önerildiği gibi oluşturmak gerekiyordu .
giovannipds

121

1.3.0 sürümünde IMO hatası var.
Sürüm 1.2.3'e düşürmek sorunumu çözdü.

Ben varım

  • Laravel 5.1
  • PHP 5.6.40

Sürüm 1.2.3'e Geçiş


3
Evet, bu en iyi cevap, sorun yeni sürüm
Adrian Edy Pratama

Evet! Intelephense 1.3.0'a güncellendiğinde bir saat önce başlayan tam olarak aynı sorunu yaşadım - 1.2.3'e düşürmek sorunu düzeltti.
leo

1
Benim için de aynı. PHP 5.3.3 bir proje üzerinde çalışıyorum. Bir kez 1.3 her yerde hatalar kuruldu. Intelephense uzantı ayarında PHP sürümünü 5.3.3 olarak ayarlamak ("intelephense.environment.phpVersion": "5.3.3") hiçbir şey yapmadı. 1.2.3'e geri dönmek sorunu çözdü.
Ben

2
@Alex Başka sorunlar var. Sorgu kapsamları vb. İçin hatalar alırsınız. Bu sadece cepheler değil.
Miloslav Milo Janoušek

2
Intelephense 1.3.3, çalışma alanınıza ve kodlama stilinize uyacak ek yapılandırma seçenekleri ekler. Her bir tanımlanmamış tanı kategorisi artık uygun olacak şekilde etkinleştirilebilir / devre dışı bırakılabilir.
bmewburn

19

Eski sürüme geçmenize gerek yoktur:

"İntelephense.diagnostics.undefinedSymbols" ayarlarında tanımlanmamış sembol tanılamayı devre dışı bırakın: false.

Veya laravel cepheler için taslaklar ekleyen bir yan yardım kullanın. Bkz. Https://github.com/barryvdh/laravel-ide-helper


3
IDE Yardımcısı Rota kapatma veya diğer kapatma ile ilgili sorunları çözer, ancak etkili kapsamları vb. Kullanırken diğer hatalarla karşılaşırsınız
Miloslav Milo Janoušek

3
Bu yüzden bir sorunu çözmek için gerçek tanılamayı kaybetmemiz gerekiyor. Olmaz Josei!
Carlos Mora

IDE Helper'ı kurdum ve talimatlara göre dosyayı oluşturdum .. Bu bir Laravel projesinde. Hiçbir şey değişmedi ve hala her yerde tanımsız semboller vardı. Bu yüzden
1.2.3'e düştüm

15
use Illuminate\Support\Facades\Route;

Uyarı İlgili ad alanı içe aktarıldıktan sonra kayboldu.

Sürüm en

  • Larvel 6+
  • vscode sürüm 1.40.2
  • php intelephense 1.3.1

Bu aslında sorunu çözer. Console.php içindeki komutlar için aşağıdakilerle birlikte de çalışır: illuminate \ Support \ Facades \ Artisan kullanın;
Alex

Bu tavsiye edilmez. laravel-ide-helperyapılandırma.
giovannipds

Bunu eklemek sorunu çözdü Route, ama aynı hatayı Authaldım, bu yüzden de ekledim use Illuminate\Support\Facades\Auth;. Sorun çözüldü.
Daydah

13

1.3.1 düzeltildi.

Sadece uzantınızı güncelleyin ve gitmek için iyi olmalısınız


22
Zaten v1.3.1 kullanıyorum ama hata gösterilmeye devam ediyor.
ultrasamad

Ben de, bir düzeltme var mı yoksa eski sürüme mi geçmeliyiz?
tonix

3
Benim için hiçbir şey çözmüyor. 1.2.3'e geri dönmek iyi gidiyor!
Carlos Mora

1
1.3.1 hala benim için bu sorun var. 1.2.3 Düzeltildi
NULL pointer

2
Ben 1.3.2 üzerinde ve hala sabit DEĞİL. 1.2.3'e geri düşürüldü.
Alex

12

Sorunlarınızın Cephelerle sınırlı olduğunu ve Laravel 5.5 veya üstünü çalıştırdığınızı biliyorsanız, bu çözüm size yardımcı olabilir.

Laravel-ide-helper'ı yükle

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

AppServiceProviderYardımcı sınıfı kaydetmek için bu koşullu ifadeyi

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

Ardından php artisan ide-helper:generateIDE'nin cepheleri anlamasına yardımcı olacak bir dosya oluşturmak için çalıştırın . Visual Studio Code'u yeniden başlatmanız gerekir.

Referanslar

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

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


1
Bununla ilgili sorun, yinelenen tanımlamalar
Carlos Mora

@CarlosMora bana öyle gelmiyor. Ne demek istediğini alamadım ...
giovannipds

Laravel 6.x kullanıyorum ve işe yarıyor.
hakiko

laravel 7 çok çalışıyor
alfian5229

VSephesi Authyeniden başlattıktan sonra intelephense vurgulamayı bıraktı . Bu cevapta gösterilen adımları tam olarak yaptım. VS Kodunu yeniden başlattıktan sonra, bir veya iki dakika verin ve hatalar giderilmelidir.
agm1984

6

Bu gerçekten editörünüzün Laravel'i anlaması için bir dizi yapılandırmadır.

Hepsini manuel olarak yapılandırmak istiyorsanız, işte repo . Bu hem VS kodu hem de PhpStorm içindir.

Ya da isterseniz bu paketi indirebilirsiniz . (Oluşturduğum) global olarak kurmanız önerilir.

Ve sonra sadece koş andylaravel setupIDE. bu, yumruk deposuna göre sizin için her şeyi yapılandıracaktır.


5

Hayır, hatalar yalnızca Intelephense uzantısı otomatik olarak güncellendikten sonra oluşur.

Sorunu çözmek için, Intelephense uzantısındaki "Başka bir sürüm yükle" yi tıklayarak önceki sürüme geçebilirsiniz. 1.2.3 sürümünde hiçbir hata yok.


1
1.2.3 sürümüne geçmek sorunu çözdü.
Julitillo

2

Yeni bir Satıcı sınıfı ekledikten hemen sonra bunu görürseniz, VScode komutunu (control-shift-P) çalıştırdığınızdan emin olun. Index Workspace


1

İşte çözdüm:

Uzantı ayarlarını açın:

resim açıklamasını buraya girin

Ve değiştirmek istediğiniz değişkeni arayın ve işaretini kaldırın / işaretleyin

resim açıklamasını buraya girin

Dikkate almanız gereken değişkenler:

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

1

Onlara basit, aptal olmayı tercih ederdim; Bir yardımcı yüklemek veya eski sürüme geçirmek yerine bildirimlerden kurtulmayı tercih ederseniz, bunu settings.jsonekleyerek hatanızı devre dışı bırakmanız yeterlidir :

"intelephense.diagnostics.undefinedTypes": false

0

1.3.3 düzeltildi. Yalnızca uzantınızı güncelleyin.


sadece güncellemekle kalmaz, aynı zamanda @bmewburn cevabının söylediği gibi bazı özellikleri devre dışı bırakmanız gerekir
Adrian Edy Pratama

0

Aynı sorunu yaşadım ve aşağıdakiler sorunu ele almış gibi görünüyordu.

a) En son sürüm 1.3.5'e güncellendi ve tüm tanı ayarlarını yeniden etkinleştirdi.

Hala mesajları alıyordum

b) Çalışma alanına bağımlı kütüphanelerle birlikte satıcı klasörü eklendi

Bu sorunu çözmüş görünüyor.


Kullanabilirsinizlaravel-ide-helper
giovannipds

Bahşiş için teşekkürler. Drupal'ın içinde Symfony kullanıyorum. Laravel-ide-helper yardımcı olur mu?
anoopjohn

0

Bu sorunlardan geçen ve tüm denetimleri devre dışı bırakma konusunda huzursuz olan herkes için, Intelephense'e kendi özel imzalarınızı iletmenin bir yolu vardır (VSCode kullanıyorum, ancak Visual Studio Code için de aynı şekilde çalışmalıdır).

Intelephese repo'nun yorumundan (@KapitanOczywisty tarafından) kopyalandı:
https://github.com/bmewburn/vscode-intelephense/issues/892#issuecomment-565852100

Tek çalışma alanı için çok basit, .phptüm imzalarla dosya oluşturmanız gerekir ve intelephense bunları dizine ekleyecektir.

Küresel olarak taslak eklemek istiyorsanız, yine de yapabilirsiniz, ancak amaçlanan özellik olup olmadığından emin değilim . intelephense.stubsYanlış değer hakkında uyarı atsa bile , aslında herhangi bir klasör adı koyabilirsiniz .

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

Not: saplamalar bu ayar değişikliği ile yenilenir.

Yerleşik saplamalara buradan göz atabilirsiniz: https://github.com/JetBrains/phpstorm-stubs

Benim durumumda, ben dspec en gerekli describe, beforeEach, itben sadece imzalarla dosyayı dahil yani ..., hatalar olarak vurgulanır yok etmek /directories_and_paths/app/vendor/bin/dspecihtiyacım işlevi bildirimleri vardı benim VSCode çalışma alanı ayarları içinde:

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

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

// ... and so on
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.