結論:psr-0とpsr-4で読み込み方が違うのでそれ用の指定をcomposer.jsonに追加してあげると解決した。
なんとphpの話題
Laravel5というのを触り始めまして、もうこれがなんだかハッピーな感じの作りになっているんで自宅でも触って練度高めていこうというモチベーションがあるんです。大変に珍しいことです。
最近のphp開発とはこうなんですというエッセンスがあるので、時代から取り残されていた部分を一挙に取り返さないといかん、と思っております。名前空間とかトレイトとか、よく分かってないけどそういうやつね。
で、ちょうどFlaskで作りかけて放置していた物があったので、それをLaravel5で移植してみます。
Laravel5 + Twig + React + Stylus + webpack といった感じ。いまどきのアレコレてんこ盛り。
Reactはまだよく分かってないが、webpackでStylusをコンパイル?すると、jsの中にcssの表現も一緒に入っちゃって、なんかもんげー感じです。ファイルの分割の機能がwebpackにはあるので、cssファイルとして別途吐き出させることも可能なはず。そこまでは理解が進んでないのでまたこんど。
さて掲題の件。
さいしょこそ普通に
こういうかんじでLaravel5にTwigを組み込み、使ってました。
が、たぶんartisanコマンド使ったあたりで突如、
FatalErrorException in ProviderRepository.php line 150: Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found
こんなエラー発生。ほんとに突然です。前後でcomposer.jsonを書き換えたとかもなかった(はず)。
あまりにも急なことだったので、寝ぼけてファイルの移動でもやらかしたかとオロオロしたりとか。vendorディレクトリとcomposer.lockをまるっと消してcomposer installで再構築してみても症状が変わらない。まったく意味がわかんなかったんですが、Laravel5本か、どっかのブログか、qiitaでみた記述をふと思い出しました。
いわく、何か一つでもPSR-4形式でのモジュール読み込みをした瞬間から、特に指定がなければLarabel全体がPSR-4で動作するものとしてなんとかかんとか。
うろ覚えなんで話半分で。
さしあたりそのぼんやりしたヒントを手がかりにして、ぐぐります。
「psr-0 psr-4 php」とか「composer.json psr-4 autoload」とか、雑なキーワードですが、仕方ない。何も分かってない状態。
不思議とヒット
探してみるといろいろ出てきます。
- Composer が PSR-4 に対応していた – ngの日記
- ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog
- PSR-4 autoloader (日本語訳) – Qiita
- Use Laravel Contracts to Build a Laravel 5 Twig Package
あら、これなんじゃないの?
psr-0とpsr-4以外記述方法に違いはありませんが、設定値の意味が変わっています。
ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blog
ほう。ほうほう。どうせ意味分かってないのだしということで、書き方を真似してみます。
さあどうだ。画面をリロードしてみます。
Whoops, looks like something went wrong.
ウープスじゃねえよぶっ飛ばすぞ。
あ、そうだアレやんないと。
composer dump-autoload
リロード。
はい、解決ですよかった。
かなりラッキーパンチで解決したからよかったようなものの、あたしには難しかったよ。
ともあれ、これで開発の続きができるというものです。よかった。
かんけいないけどGistって便利ね。なんだこれ。
記事中にあるLaravel5本とはこれのこと。