(id:studio-m)この広告は、90日以上更新していないブログに表示しています。1.3ブランチで検証しました。(2011/05/05追記)コメントで現時点のCake2.0では再帰的な探索を行わないとのご指摘を頂きました。追えてないけど、import周りの処理は大幅に変更されるようです。「CakePHPではControllerは1つのディレクトリに全部入れるのがふつう」という話を聞いて、さすがにそれはないだろうと思って調べたらapp/config/bootstrap.phpに$controllerPathsを書けば探索パスを追加できるという情報を得た。yandodの日記コントローラの中身をフォルダ分けする|ASTRODEOのだけど、どうにもうまく動かなくてあちこちいじくり回してたらいつの間にか動くようになったり、別のサーバにdeployしたらまた動かなくなったりして挙動が怪しい。本体のコードを見ると、$controllerPathsなんてどこにも書いてなくて何かが間違っているように見える。1.3によれば1.3になった時点で$controllerPathsは使えなくなったらしい(それならそれでwarningなりと吐けよと思うのだが)。$controllerPathsが動作することを期待したコードは動かないはずなのだが、目の前には何故か動く環境と動かない環境があって意味がわからないよ。思ってコードを追ってみるといろいろわかった。■App::importの処理App::importはファイルを探索する際の対象パスとして、file_mapキャッシュ(app/tmp/cache/persistent/cake_core_file_map)を参照する。このキャッシュは1行目が有効期限、2行目がシリアライズしたデータになっており、以下のコードを実行することで内容を確認できる。'$c=explode("\n",file_get_contents("app/tmp/cache/persistent/cake_core_file_map"));var_dump(unserialize($c[1]));以下はApp::importがControllerを読み込む時のあるユースケースにおけるフローを読んだメモ。dir_mapからファイル探索」といったところ。ここで問題になるのが、dir_mapが正しいことを誰も保証してくれないこと。dir_mapにキーがなければディレクトリを読んでくれるが、古いデータがdir_mapに入っていた時にそれを更新する仕組みがない。■経緯の妄想ここから先は調べるのが面倒なので、憶測だけ書き散らかす。誰か詳しく知っていたら教えてください。ある時点まではApp::__findはディレクトリを再帰的にたどる機能を持っていなかったなので、dir_mapが更新されるのはアプリケーションの設計が大きく変わる時だけだった「それぐらい変わる場合はキャッシュを手動で消せよ」で済んでいたある時からApp::__findがrecursiveをサポートするようになったdir_mapが更新されるべきケースが出てきた面倒なので、あるいはそういうケースは特殊なので放置しているApp::__findでControllerも再帰的に探索できるという情報が広まっていないようなので、この機能はCake的には位置付けとして重要でないのかも知れない。フォルダ内のそれぞれ適切なフォルダの中かその下(サブフォルダも可)に設置します。オマケ程度に触れられているのが確認できた。このdir_mapが更新されない問題は、1ヶ月ぐらい前の2.0のブランチでも変わっていなかったので、このあたりは「お前がキャッシュ消せば済む話」という扱いなのかも知れない。最新版ではコードの構成が根本的に変わっていたので追いきれていない。releasedフリーランスという働き方cobblerでRHEL6系のリポジトリをミラー出来ない時の対処法PHPのnullはハマりポイントになりかねない月別アーカイブはてなブログをはじめよう!studio-mさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。