質問: CakePHPでコントローラーとビューをディレクトリ分けする方法を教えてください。 ■ディレクトリ構造 /app +-controllers/ +-admin/ +-top_controller.php +-top_controller.php +-views/ +-admin/ +-top/ +-index.ctp +-top/ +-index.ctp ■目的 でアクセスすると、app/controllers/top_controller.phpが実行して欲しい。 でアクセスすると、app/controllers/admin/top_controller.phpが実行して欲しい。 ■bootstrap.phpに以下を追加しました(長くなるので、コントローラーのみ記載) App::build(array( 'controllers' => array( ROOT.DS.APP_DIR.DS.'controllers'.DS.'admin'.DS, ROOT.DS.APP_DIR.DS.'controllers'.DS, ), )); ■routes.phpに以下を追加しました Router::connect('/', array('controller' => 'top', 'action' => 'index', 'home')); Router::connect('/admin', array('controller' => 'top', 'action' => 'index', 'home')); ■問題 にアクセスすると、管理用のコントローラーが実行される 書き方に問題があると思うのですが、1.3用の書き方や情報を探す事が出来ずに質問しました。 ご存じの方は教えてください。バージョンは1.3.2を使用しています。
回答: 対策、分かりました。 原因はやはりキャッシュでしたね。 デフォルトの設定だと、app/config/core.phpで、 ``` Cache::config('default', array('engine' => 'File')); ``` という設定されています。 この部分を、 ``` if (preg_match('/\/admin\/.*/i', $_SERVER['REQUEST_URI'])) { Cache::config('default', array('engine' => 'File', 'duration'=> 3600, 'probability'=> 100, 'path' => dirname(CACHE) . DS . 'cache_admin' . DS, 'prefix' => 'cake_', 'lock' => false, 'serialize' => true)); } else { Cache::config('default', array('engine' => 'File', 'duration'=> 3600, 'probability'=> 100, 'path' => CACHE, 'prefix' => 'cake_', 'lock' => false, 'serialize' => true)); } ``` のように書き換えます。もっと簡略化できると思いますが、一応、core.phpに記載されているサンプル通りに記載しておきます。 ここで設定しているのは、キャッシュファイルの置き場所を、/admin/にアクセスした場合と、通常の場合とで変えています。キャッシュにファイルを使っていない場合は、適宜、変更してください。 上記の場合は、デフォルトだと、app/tmp/cacheがキャッシュディレクトリとして利用されるところを、/admin/のアクセスの場合だけ、app/tmp/cache_admin/を利用するように指定しています。 このように指定して、app/tmp/cacheディレクトリをapp/tmp/cache_adminとしてコピーしておけば、僕の手元では適切なキャッシュが読まれるようになり、この問題を回避できました。 何かの参考になれば。