人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHPでコントローラーとビューをディレクトリ分けする方法を教えてください。

■ディレクトリ構造
/app
+-controllers/
+-admin/
+-top_controller.php
+-top_controller.php
+-views/
+-admin/
+-top/
+-index.ctp
+-top/
+-index.ctp

■目的
http://localhost/cakephp/でアクセスすると、app/controllers/top_controller.phpが実行して欲しい。
http://localhost/cakephp/adminでアクセスすると、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'));

■問題
http://localhost/cakephp/にアクセスすると、管理用のコントローラーが実行される


書き方に問題があると思うのですが、1.3用の書き方や情報を探す事が出来ずに質問しました。
ご存じの方は教えてください。バージョンは1.3.2を使用しています。

●質問者: k27w
●カテゴリ:ウェブ制作
✍キーワード:CakePHP CONNECT ds HOME INDEX
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●300ポイント ベストアンサー

対策、分かりました。

原因はやはりキャッシュでしたね。

デフォルトの設定だと、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としてコピーしておけば、僕の手元では適切なキャッシュが読まれるようになり、この問題を回避できました。

何かの参考になれば。

◎質問者からの返答

ありがとうございます。こちらでも動作できました。

core.phpの最下部に例が記載されていたんですね。完全に見逃していました。


これで、appディレクトリを分ける事もなく、同じモデルやコンポーネントを

複製する事もないので、かなり効率的な利用が出来そうです。


コメントの件から丁寧に対応いただき、誠にありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ