2011年 あけましておめでとうございます。
2011年もぼちぼち自分のペースで更新して行きたいな、って思ってます。
本年もどうぞ宜しくお願いします_(..)_
・・・というワケで、早速2011年最初の記事内容に移りますね。
CakePHPをインストールして、モデル作って、コントローラ作って、ビューを作って・・・ってやってたんですが、はて?そういえばこのCakeのトップページをサイトトップとして利用する時にはどうするんだろう?と疑問が湧いたのでやってみました。
そして、トップページは静的ではなく、ちょっとプログラムも使います。
という事は、トップページ用のコントローラが必要になるわけです。
http://sitetop/controller/~ の形式だと、/app 以下にコントローラ用ファイルを用意して、
/controller/app/views/controller_name/index.ctp で良いんですが。。。
結論としては、トップへのアクセス設定と、ビューの用意。
必要に応じてコントローラを拡張すること、で出来ました。
ルートの設定は routes.php で
▼\app\config\routes.php:29行目辺り
トップへのアクセス設定を書き換える事で、任意のコントローラのアクションを指定する事が出来ます。
デフォルトでは、pagesコントローラのdisplayアクションで、homeビュー・ファイルを指定してあります。
それを、例えば以下のように書き換えてみます。
// Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/', array('controller' => 'pages', 'action' => 'index'));
これで、
▼/app/views/pages/index.ctp というファイルを用意すると、このビューが使われるようになります。
コントローラの用意
以下のファイルをコピーして、/app/controllers/ の中にコピーします。
/cake/libs/controller/pages_controller.php
もともと書いてある diplay() アクションは、ざっくり削除 or コメントアウト。
そして、index() アクションを作成。。。これで出来ました!丶(・ω・)ノ
ところが・・・/app/views/pages/index.ctp で書いてる
<?php echo $this->Session->flash(); ?>
の箇所でエラーが出ます。。。なぜに?(´・ω・`)
というワケで、もとの pages_controller.php を良く良く見てみると、helperにSession指定がっ!!
var $helpers = array('Html', 'Session');
なので、コピーして作成したコントローラでもhelperにSession指定を書き加えてみました。
これでエラー解消。。。良かった。
という事で、サイトのトップ指定が出来るようになりました。
練習としてiphone用のWebアプリを作っていたので、この時、トップを指定したかったのでこういった作業が必要になりました。
あとがき
ここではpagesコントローラを拡張したのですが、そもそもコントローラの初期拡張って AppContoller ・・・という事は、pages_controller を使うよりも、app_controller使う方が良いのかなぁ。。。どうする方が良いんだろ?(・ω・)
app_controller はそもそも中身空っぽだし、こっちでやる方が良いんでしょうかね。
という疑問が湧いてるところです。。。
【参考情報】
■Routesの設定 :: 環境設定 :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook