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が$users
がUser
エンティティの配列であることを認識していないので、{{ $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やアクセスできないメソッドを呼んでしまうよりは良いかと思います。