Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Bento's avatar
Level 2

VSCode/Cursor setup for PHP 8.5 & Laravel 13?

Hiya,

Been using VSCode and now Cursor for years and have accumulated some extensions to work with Laravel and PHP. However I have started to become a little puzzled which ones I really need and trying to declutter / optimize my setup.

Currently I run:

  • Intelephense (paid)
  • Laravel (Official extension)
  • Laravel Pint to format on save etc.
  • PHPStan by SanderRonde
  • PHP Namespace Resolver
  • PHP CS Fixer (Shouldn't Pint on it's own be enough?)
  • Laravel Extra Intellisense (idk if useful with official Laravel ext also installed)

I also run laravel-ide-helper on each composer install/update. But it seems to cause problems sometimes in Cursor where for example $model->update() gets squiggly lines because it thinks

I have played with PHPantom lately seeing it incorporates a lot of tooling in one and should be faster than Intelephense but it needs some more work before it can replace Intelephense in Cursor imho.

Anything I should drop or add?

0 likes
3 replies
imrandevbd's avatar

I've been through this exact "extension bloat" cycle. If you're on PHP 8.5 and Laravel 13, you definitely have some redundancy fighting for CPU cycles.

My recommended "Lean" Stack: Intelephense, Laravel, Laravel Pint, PHPStan,

1 like
Bento's avatar
Level 2

Are you using https://github.com/barryvdh/laravel-ide-helper? Because lately that seems to be the culprit of Laravel methods not being recognized properly for me.

Like:

// Undefined method 'belongsTo'.intelephense(P1013)

    public function role(): BelongsTo
    {
        return $this->belongsTo(Role::class, 'roles_id');
    }

or update() on Models saying it requires 4 params instead of just an array with whatever I need to update.

Or:

imrandevbd's avatar

Yeah, laravel-ide-helper is almost certainly your culprit. It generates those massive stub files that end up clashing with Intelephense’s own indexing. When you see update() asking for 4 params, it's usually because the LSP is getting confused between the real Eloquent source and the helper's generated stubs.

Honestly, for Laravel 13, you can kill the ide-helper entirely. The official Laravel extension combined with a paid Intelephense license handles almost everything natively now.

Please or to participate in this conversation.