現象:プラグインのwebroot 配下のファイルにアクセスしたいがエラー
例えば、プラグインにスタイルシートを含めたいとする。
こんな感じにファイルがあるとする。
app/Plugin/MyPlugin/webroot/css/style.css
これをブラウザからアクセスする場合、下記のURLで良いはず・・・
http://myservice.com/my_plugin/css/style.css
→Missing Controllerなエラーになるorz
さくらインターネットのスタンダードなので「mod_rewriteのRewriteBase云々の影響?」とか一瞬よぎったけど、ちゃんと(?)Missing ControllerエラーになっているってことはCakePHP内のURLのディスパッチ処理を追っていけば解りそうなのでデバッグしてみた。
下記あたりをデバッグ
lib/Cake/Routing/Dispatcher.php
lib/Cake/Core/CakePlugin.php
解決方法(というかお決まり事か・・・)
app/Config/bootstrap.php にて、
CakePlugin::load(array('MyPlugin'));
をしておくと、ディスパッチのタイミングで既にプラグインが読み込まれ済みなので、ちゃんとURLを処理できる。
※というか、bootstrap.phpにそれらしいこと書いてあるやん・・・
これはCakePHP1.3系ではプラグインは自動で読み込まれるから大丈夫だった?
Web上でこれに関する言及があまりないから2.0からの話かなぁ。
これまでの開発の1.3系を使っていたときはプラグイン内のcssを使うことは無かったので、知らなかっただけかもですが。
プラグインはControllerでloadしてたし。
解決に8時間掛かった。
昼前に30分悩んだところで娘の散歩に出掛けた。
公園で遊んで居たら娘が遊具で前歯を打って欠けさせてしまって、そこから環状線の真反対の休日救急歯科へ。
大したことはなかったけど、欠けたままで暮らすことに。また、神経が死んでないかどうかは一週間ぐらいしないとわからないそうorz
そんなこんなで15時頃に帰宅、遅い昼飯はT&Aカレーのお持ち帰り。
お腹いっぱいになって昼寝。
17時ぐらいに起きて、上記のデバッグをして30分ぐらいででけた。
散歩に出発以降、ずっと頭の片隅にこの現象のことがあったわけで、娘の歯の心配をしながらも、親として注意不足に凹みながらも、モヤモヤ感があった。
そんなことしてたら悩みでハゲるかもしれないので、今度からは現象や不具合はすぐその場で解決したいなぁと思った。