0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode で Intelephense 利用時の FuelPHP の Core Library 参照エラー解決法

Posted at

はじめに

VSCode などのエディタで PHP の LSP を提供してくれる Intelephense は、PHPで開発する人にとってなくてはならないツールです。
しかし、FuelPHP フレームワークを使って開発していると、FuelPHP の Core Library を利用している場所で参照エラーが発生し、とても不便な状態になります。

そこで、今回はこの状態を解決する方法をお伝えします!

問題の背景

FuelPHP で Core Library を利用する場合にエラーが発生する原因は Fuel\Core\ClassNameClassName で参照しているためです。
FuelPHP ではデフォルトで Fuel\Core\ClassNameClassName として参照できるようにエイリアスが設定されていますが、このエイリアスが貼られているかどうかは動的に解析しない限りわかりません。
そのため、Intelephense はそのようなクラスが存在しないとして参照エラーを発生させます。

解決策

この問題を解決するためには fuel/app/config/development/alias.php などのどこからも参照されないファイルを作成します。
例えば Config クラスが参照エラーになっている場合、class Config extends Fuel\Core\Config {} という一行を追記することで解決します。
このファイルは Autoloader で読み込まれる場所にある必要はなく、作業ディレクトリ以下のどこかに存在していれば問題ありません。
今回は fuel/app/config/development に置きましたが、直接作業ディレクトリに alias.php を配置しても解決します!
もちろん alias.php という名前である必要もないです。

コード例

例えば ConfigCookieSession がエラーとなっている場合、以下のように記述することで参照エラーが解決します。

fuel/app/config/development/alias.php
<?php

class Config extends Fuel\Core\Config {}
class Cookie extends Fuel\Core\Cookie {}
class Session extends Fuel\Core\Session {}

独自クラスを fuel/app/bootstrap.php などで \Autoloader::add_classes() を利用して追加している場合は、独自クラスを継承することで解決します。

fuel/app/config/development/alias.php
<?php

class Hoge extends My\ClassName\Hoge {}

まとめ

これで Intelephense を使って快適な PHP 開発ができるようになります!是非試してみてくださいね!

Happy coding!

余談

自分は VSCode を利用したことがなく、常に vim で開発を行っております。
vim での開発時に Intelephense の参照エラーを解決した方法社内で共有したところ、VSCode で同じ問題に悩まされていた人たちも解決したようでした。
思った以上に社内で反響があったので記事に残しました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?