概要
最近、デプロイ時にcomposerが2にバージョンアップされた状態で実行されてしまいpsr-4のエラーが出てしまい、今まで出ていた警告等を含めて対応することになりました。でも、何故か昔はLaravelのModelのwhereの様なメソッドが認識出来てたの認識(あまり気にしてなかったので勘違いの可能性も)でしたが参照が出来なく、phpstormのコード補助機能が使えないことにイライラして来ました。
参考:https://medium.com/legacybeta/using-composer-2-0-with-psr4-388b78b98aaa
composer.jsonを指定
composer.jsonで指定しているpsr-4について連携する目的で設定しますが、それ以外の利点もあるかと思います。
「Preference」 > 「Languages & Frameworks」 > 「PHP」 > 「Composer」の順で入ります。
こちらの画面です。プロジェクトのcomposer.jsonを設定したらOKです。自分の場合はpackageの更新をチェックする必要がないと思いましたので、「Check for available package updates」のチェックを外しました。それで「install」や「show log」も正常に動きます。
この設定でpsr-4の警告がずらっと出ると思いますので、対応は必須(composer2で問題が発生すると)だと思います。
LaravelのModelのコード補助
目的にModelのメソードのコード補助ですが、fluentクラスの補完も出来るようです。
参考1:https://www.sd-milieu.net/posts/laravel-completion/
参考2:https://github.com/barryvdh/laravel-ide-helper
開発モジュールのインストール
# composer require --dev barryvdh/laravel-ide-helper
参考した記事では「doctrine/dbal」も設置しますが、「barryvdh/laravel-ide-helper」をインストールすると一緒にインストールされます。
ide-helperの作成
# php artisan ide-helper:generate
Modelのコード補助を作成
# php artisan ide-helper:models --dir="app/Models"
Do you want to overwrite the existing model files? Choose no to write to _ide_helper_models.php instead (yes/no) [no]:
>
ここで英語質問が。。。一瞬固まりましたが、簡単に説明すると対応方法がPHPDocの記入で対応することで既にある全Modelクラスに直接書きます?それとも「_ide_helper_models.php」ファイルに書きますか?のことです。
「yes」を選択するのをオススメしますが、何かの理由で「no」を選択しないと行けない場合はPhpStormで以下の警告の対応をしないと行けないです。
multiple definitions exist for class
作成された「_ide_helper_models.php」を見ると分かると思いますが、同じクラス名が作られてそこにPHPDocが定義されていますので、PhpStorm的に同じクラスが複数あるからどちらなの?って感じです。これは対応方法は警告を表示しない方法しかないようです。
参考:https://stackoverflow.com/a/23079082
「Preferences」 > 「Editor」 > 「Inspections」 > 「PHP」 > 「Undefined」 > 「Undefined class」で「Don't report multiple class declaration potential problems」にチェックを入れます。
最後に
上記の内容はphpの正しいコーディングをする為の補助機能を活性するものです、その警告をどのくらい直すかどうかは本人の責任です。この習慣を付ければいつの間に良いソースが出来るかと思います。