CakePHP2.xコントローラーフォルダ分け

ここではCakePHP2.x系のコントローラーをフォルダに分ける方法を解説していきます。

cakephp

今回は例として
/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と同じ扱いで使用できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください