普通のアクションとscaffoldを混在させる
たいていのウェブアプリには、管理用のインターフェースが必要になります。うちの会社ではこれまでコントローラを分けて、通常のアプリ用のコントローラと分けていたのですが、今回はscaffoldを使って一つのコントローラで簡単に共存する方法を試してみました。
使うのは、プレフィッス・ルーティング。以前のバージョンではadminルーティングと呼ばれていたんでしょうか。ドキュメントにも多少の混乱がみられますが、URLのパスの先頭に、通常のコントローラとアクションとは別の文字列を入れられる機能です。Configureでadminをプレフィックスとして認識するように指定。
config/core.php でプレフィックスとしてadminを受け付けるように指定
<?php Configure::write('Routing.prefixes', array('admin'));
次に、$scaffoldにプレフィックスで指定した文字列を設定すると、そのプレフィックスのみに反応するscaffoldが反応するという仕組みになってます。ここあまり触れられてなくて僕も最近まで知らなかったです。盲点でした。
app_controller.php でscaffoldはadminプレフィックス専用であることを指定
<?php var $scaffold = 'admin';
これで、 /users/ では通常のアプリ内部でのユーザーリスト、/admin/users/ では管理者専用のユーザーリストを出し分けることができます。app_controllerで指定しているので全てのコントローラで有効になってます。適時、必要ないところをfalseにしてつぶしていきます。まぁ、これは逆に必要なところだけ指定するのでもいいかもですね。
viewは標準のものが使われますが、views/users/scaffold.index.ctp を用意することで内容をカスタマイズすることが可能。いくら管理画面とはいえ、ノーカスタマイズですむことは皆無なので、ここは通常ファイルを作ることになるでしょう。
作りにあまり感心するところが少ないCakePHPですが、このScaffoldだけは、おー!よく実現できてるなー。どうやってんだ?!と驚いた思い出があります*1。これだけのものを使わない手はないですよね。今後は活用していきたいと思います。
オープンソース徹底活用CakePHP1.3によるWebアプリケーション開発
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2010/06/28
- メディア: 単行本
- 購入: 2人 クリック: 74回
- この商品を含むブログ (15件) を見る
*1:実際コードをのぞいてみると、驚くほど実直に実装されていて、まぁ、そうだよな、とがっくりもしましたw