端くれプログラマの備忘録 CakePHP [CakePHP] プレフィックスルーティングを使って管理者ページを作成する

[CakePHP] プレフィックスルーティングを使って管理者ページを作成する

管理者ページを作成したいときに役立つのがプレフィックスルーティング。

たとえば admin 以下を管理者ページとして、通常ページとレイアウトを切り替えたりできる。

1. プレフィックスルーティングを有効にする

デフォルトでは無効になっている。以下の行のコメントを外して有効にする。

// app/Config/core.php
Configure::write('Routing.prefixes', array('admin'));

2. コントローラにadminのプレフィックスをつけたメソッドを作成する

// app/Controllers/ProductsController.php
class ProductsController extends AppController {
     public function admin_index() {
         // do something
     }
}

このメソッドは /admin/products/index のURLで呼び出される。

3. ビューファイルを作成する

メソッド名と同じ名前でビューファイルを作成する。app/Views/Products/admin_index.ctp

4. アクセスに応じてレイアウトを切り替える

まずはadmin用のレイアウトを作る。app/View/Layouts/admin.ctp

アクセスに応じてレイアウトを切り替えるには、adminのプレフィックスが付いたメソッドでレイアウトを指定する。

$this->layout = 'admin';

これは手軽だけど、全てのadminメソッドで指定しないといけないので手間。

基底クラスに以下のように書いておくと簡単で確実。

// app/Controllers/AppController.php
class AppController extends Controller {
    public function beforeFilter() {
        if (isset($this->request->params['admin']) &&
            ($this->request->params['prefix'] == 'admin')) {
            $this->layout = 'admin';
        }
    }
}

参考サイト

Routing — CakePHP Cookbook 2.x documentation
http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing