VS Code extension that brings language intelligence to Laravel Blade templates (.blade.php).
- intelephense (
bmewburn.vscode-intelephense-client) - PHP 8.x with the
phpbinary available (or configured viabladeParser.phpCommand) - ext will set
intelephense.codeLens.references.enabletofalseto avoid duplicate code lens in php as we override it to show references in blade files aswell.
Note
if you are going to use docker make sure to include -i in your command, ex.docker exec -i <app-image-name> php
All standard VS Code language features enabled for Blade files
- Go to Definition — jump to class/method/function definitions from Blade
- Find References — locate all references to a symbol across the project
- Hover — type signatures and docblocks on hover
- Document Symbols — outline and breadcrumb navigation for PHP symbols
- Reference CodeLens — see reference counts above classes, functions, methods, properties, enums
- Reference Rename — update reference on rename
1 : use @var comment
@foreach ($users as $user)
{{-- @var \App\Models\User $user --}}
@if ($user->isActive)
// ..
@endif
@endforeach2 : use assertion
-
add global function
use Webmozart\Assert\Assert; if (! \function_exists('_is')) { /** * @template T of object * * @param class-string<T> $type * * @return T */ function _is(object $obj, string $type): object { return Assert::isInstanceOf($obj, $type); } }
-
now use it like so
@foreach ($users as $user) @if (_is($user, \App\Models\User::class)->isActive) // .. @endif @endforeach
why u might use both ?
so you dont have to rewrite
@php
// from
$serverErrors = collect($errors->getBags())
->flatMap(fn($bag) => $bag->messages())
->toArray();
// to
$serverErrors = collect($errors->getBags())
->flatMap(function($bag) {
/** @var \Illuminate\Support\MessageBag $bag */
return $bag->messages();
})
->toArray();
// instead
$serverErrors = collect($errors->getBags())
->flatMap(fn($bag) => _is($bag, \Illuminate\Support\MessageBag::class)->messages())
->toArray();
@endphpTip
For complex variables, use @see
use @see the same way you use it in php files to jump a class/method
{{-- @see \App\Models\User::isVerified() --}}
// or
{{-- @see \App\View\Composers\UserComposer::compose() --}}- we support showing type on hover
- we support
go to referencethrough Laravel Goto View - the support for
View::creator& controller data is not possible without makeing an actual request to the endpoint
- using the grammar from vscode-laravel, we now have better support for blade fenced blocks in markdown