ここではCakePHP2.x系のコントローラーをフォルダに分ける方法を解説していきます。
今回は例として
/app/Controller/admin/
/app/Controller/front/
と管理画面用コントローラーとフロント用コントローラーに分けていきます。
bootstrap.phpを編集
/app/Config/bootstrap.php
if (preg_match('/admin/', $_SERVER['REQUEST_URI'])) { App::build(array( 'Controller' => array(ROOT.DS.APP_DIR.DS.'Controller'.DS.'admin'.DS), )); } else { App::build(array( 'Controller' => array(ROOT.DS.APP_DIR.DS.'Controller'.DS.'front'.DS), )); }
$_SERVER[‘REQUEST_URI’]でアクセスがあったURLで管理画面かフロントかを分けています。
URLのルーティング
/app/Config/routes.php
Router::connect('/admin/', array('controller' => 'Index', 'action' => 'index')); Router::connect('/admin/top/', array('controller' => 'Top', 'action' => 'index'));
http://www.example.com/admin/とアクセスするとadminフォルダのIndexControllerのindexメソッドが呼ばれます。
※アクション名がindexなら’action’ => ‘index’を省略できます。
constファイル作成
/app/Config/bootstrap.phpの最後にconfig(‘const’);を記入してください。
const.phpを作成
/app/Config/const.php
<?php /** プロジェクト名 **/ if (preg_match('/projectname/', $_SERVER['REQUEST_URI'])) { define('PROJECT', '/projectname'); } else { define('PROJECT', null); } // 管理画面 if (preg_match('/admin/', $_SERVER['REQUEST_URI'])) { define('SITE_URL', PROJECT . '/admin/'); /** ログイン画面 **/ define('INDEX', SITE_URL); /** TOP画面 **/ define('TOP', SITE_URL . 'top/'); } // フロント else { define('SITE_URL', PROJECT . '/'); define('INDEX', SITE_URL); }
これでルーティングされた独自定数の定義が完了。
$this->request->hereと同じ扱いで使用できます。