[PHP]composer autoload できない?追加デプロイしたclassファイルが呼ばれていないっぽい時に確認すること

プログラミング

久しぶりの更新なのでリハビリがてら戒めのメモ書きを。

せこせこと更新作業に追われながら新しくファイル追加してデプロイ。

でもなにやらnewされない(´・ω・`) 本番環境でだけ。
Log追っていくと、新しく作ったクラスファイルをautoroderで見つけられてないみたい。

composer dump-autoload --optimize

大体はこの魔法の呪文で解決できるかなと思います。

Class map generation essentially converts PSR-4/PSR-0 rules into classmap rules. This makes everything quite a bit faster as for known classes the class map returns instantly the path, and Composer can guarantee the class is in there so there is no filesystem check needed.(クラスマップの生成は、基本的にPSR-4 / PSR-0ルールをクラスマップルールに変換します。これにより、既知のクラスではクラスマップが即座にパスを返すため、すべてがかなり高速になり、Composerはクラスがそこにあることを保証できるため、ファイルシステムのチェックは必要ありません。)

https://getcomposer.org/doc/articles/autoloader-optimization.md

細かな説明はdocumentにも有りますので割愛しますが、ルールに設定したディレクトリ以下をいい感じに最適化してclassmapファイルに追加を行なってくれたりします。

テスト環境でいけてるのに、本番環境でうごかなかったのもcompose install の際の-oつけてたか、つけてなかったかのうっかり違いで出てしまった模様。

optimizeでもダメ…??

蛇足ですが、それでもダメだった時に…。

autoload機能ではvendor/composer/autoload_classmap.phpファイルの中にクラス定義があればそのファイルを呼び込んでくれます。

なのでこういう時はclassmapを見てみましょう

cat vendor/composer/autoload_classmap.php

Namespace\hoge\fugaClass

FugaClassを呼び込みたかったので、「なんだ、あるじゃん」

と思ったら
f!!!!!小文字!!!!!!
class ファイル.php作成時に小文字で始めてしまったものが何故かあったのがすべての元凶でした。それは呼べないよね…反省…
こんな凡ミスなかなか無いとは思いますが、愚かさを忘れぬよう残しておきます(´・ω・`)

タイトルとURLをコピーしました