そんな時、デフォルトのscaffoldの画面はDBを管理するにはちょうどいいインターフェイスになっているので、管理画面として使用するにはうってつけだ。
Cake本家のドキュメントでも同じようなことをしているが、今回はこれを少し拡張した手順となっている。
通常scaffoldを使用する場合、CSSスタイルシートは各controllerで指定している$this->layoutで指定しているレイアウトと、それが参照しているcssファイルが適用されることになる。
でも、Cakeのデフォルトのレイアウトとスタイルが見やすくて好きだし、考えなくてよいので楽だと思うのです。
また、管理画面にBASIC認証をかけたいとも思う。
そんなときどうするか。
CakePHPのバージョンはcakephp-cakephp-1.3.15-9-gacd25c3.zipだけど、他のバージョンも少し修正すればいけると思います。
1.デフォルトのレイアウト、default.ctpをコピーする。
/cake/libs/view/layouts/default.ctpをコピーして、/views/layouts/scaffold.ctpを作成します(ファイル名はなんでもよい) 。
2. core.phpに以下を追加。prefixとして'admin'を登録します。
Configure::write('Routing.prefixes', array('admin'));prefixとはhttp://【mydomain】/【prefix】/【controller】/【action】のような位置で指定できるものです。
なので、これをすると、http://【mydomain】/admin/themes/indexみたいなURLでアクセスすることが可能になります。
3.app_controllerを以下のようにします。
class AppController extends Controller { var $scaffold = 'admin';//scaffoldのprefixに'admin'を指定 var $components = array('Auth','Session','Security');//Basic認証のためSecurityコンポーネントを使う function beforeFilter(){ $this->Security->validatePost = false; if(!empty($this->params['admin'])){ if($this->params['admin']) {//ここで'admin'prefixつきのアクセスかを判別 $this->layout = 'scaffold';//prefixが'admin'のアクセスの場合は、scaffold.ctpをlayoutとして使用する。 $this->paginate[$this->modelNames[0]]['limit']=20;//paginateのアイテム数はこうやって自由に変えられます。 $this->Security->loginOptions = array( 'type'=>'basic', 'realm'=>'MyRealm' ); $this->Security->loginUsers = array( 'ID'=>'PASSWORD'//IDとPASSWORDはお好きな文字列にする。 ); $this->Security->requireLogin(); } } } }
6行目の$this->Security->validatePost = false;をしているのは、Securityコンポーネントをロードした場合、formtagのチェックが有効になってしまうから。postのフォームをきちんとformタグが入るように生成している場合は問題ないが、自分はしていなかったので、falseにした。
4.route.phpに以下を追加
Router::connect('/admin',array('controller' => 'themes', 'action' => 'index','admin' => true));
これを追加しないと、http://【mydomain】/admin/themes/のようにアクセスしないといけないので。
http://【mydomain】/admin/のように短いurlで管理画面を表示できるようになる。
0 件のコメント:
コメントを投稿