PhpStorm で Laravel の Blade 内でもエンティティ等の補完をしてほしい

PhpStormにおけるLaravelの補完といえば laravel-ide-helper ですが、Blade内でエンティティ等の補完をする方法がわからなかったので調べました。

結論としては、これです。 blog.jetbrains.com

例えば、以下のようなエンティティがあったとします。

<?php

declare(strict_types=1);

namespace App\Entity;

final class User
{
    private $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }

    public function getName(): string
    {
        return $this->name;
    }
}

そして、ControllerでUserエンティティの配列を渡してBladeを呼び出したとします。

Bladeは以下の通りです。

@extends('layouts.app')

@section('content')
  <h1>ユーザ一覧</h1>
  <ul>
  @foreach($users as $user)
    <li>{{ $user->getName() }}</li>
  @endforeach
  </ul>
@endsection

この場合、PhpStormが$usersUserエンティティの配列であることを認識していないので、{{ $user->getName() }}で補完が効きません。

そこで、Bladeを以下の通りに修正します。

@extends('layouts.app')

@php
/** @var App\Entity\User[] $users */
@endphp

@section('content')
  <h1>ユーザ一覧</h1>
  <ul>
  @foreach($users as $user)
    <li>{{ $user->getName() }}</li>
  @endforeach
  </ul>
@endsection

@phpディレクティブを使って(<?php ~ ?>でも良いですが)、そこにPHPDocコメントを書くだけです。

微妙にダサい気もしますが、補完が効かずにtypoやアクセスできないメソッドを呼んでしまうよりは良いかと思います。