cakePHPは管理者用の機能のことも考えられている。それが「Admin Routing」。
この機能を使うと、閲覧者用のコントローラ内に管理者用の機能を記述することが出来る。単にそれだけだと何のことはないが、コントローラでの記述を正しくおこなうと、URLも自動で「admin」とついたそれらしいものになる(もちろんadminではなくsuperuserやroot等といったURLにすることも出来る)。
コントローラ内のfunction名は「admin_index()」といった具合に「admin_」をつけてやる。「index()」にアクセスするには、
http://hogehoge.com/controller/index
だが、「admin_index()」の場合は、
http://hogehoge.com/admin/controller/index
といった具合。app/config/core.php内の設定で、
define(‘CAKE_ADMIN’, ‘admin’);
上記の記述を、
define(‘CAKE_ADMIN’, ‘superuser’);
等に書き換えるとURLは
http://hogehoge.com/superuser/controller/index
になる(らしい)。同じコントローラ内に処理を書いておけるというのはとてもわかりやすくて好感が持てる。
ただし、これは単にroutingしてやるだけで、認証処理も同時に追加できるわけではなく、「自分で実装してくれ」とマニュアルに書いてある。これ、どうすればいいんだろう、と悩んでたら1×1さんのサイトで書かれていたことを応用すれば出来そう(shinさんお元気ですか?、一度カンファレンスでお会いさせていただきました!)。
1×1さんのサイトでは、管理者用のレイアウトをはめ込む際に、コントローラ内のbeforeRender()で、以下のスクリプトを追加する方法を紹介されている。
function beforeRender() {
if(defined(‘CAKE_ADMIN’) && !empty($this->params[‘admin’])){
$this->layout = ‘admin';
}
}
これを応用して、beforeFilter()でチェックと認証をすればできそうな感じ(そんな関数あったよね、たしか)。
function beforeFilter() {
if(defined(‘CAKE_ADMIN’) && !empty($this->params[‘admin’])){
(認証処理)
}
}
まだ現時点では未検証。近々実装するのでレポートもその際に。