「CakePHP2.0 データベースの初期設定」の続き。CakePHPのデフォルトのトップページから赤や黄色の帯が消えたところ。

これで開発を始めることができるわけだけど、最初に何をしたらいいのか?
CakePHP1系に馴染んでた人なら、さっそく何か適当に一通りBakeして、1系で動いてたビヘイビアやらコンポーネントやらが2.0だとどうなっているのか挙動をテストして・・・とか思うとこだろうけど、この記事は徹頭徹尾、ゼロからスタートの感じで書きたい。
というわけで、平凡ですがまずはトップページからいきます(´~`;)
CakePHP1.3とかを使い慣れていて、そこからの移行を検討してる人にはあまり役に立たないと思いますが悪しからず。
トップページがCakePHPのデフォルトのままでは困ってしまうので、まずはそこからいじりたいわけだけど、どうすればいいのか。実は上の画像の画面からちょっと下にスクロールしたところにちゃんと書かれてます。
Editing this Page
To change the content of this page, create: APP/View/Pages/home.ctp.
To change its layout, create: APP/View/Layouts/default.ctp.
You can also add some CSS styles for your pages at: APP/webroot/css.このページを編集するには
このページの内容を変えたければ「APP/View/Pages/home.ctp」を作れ。
レイアウトも変えたいなら「APP/View/Layouts/default.ctp」を作れ。
CSSでスタイルを設定したければ、自作のページ用のCSSファイルを「APP/webroot/css」フォルダ内に作れ。
はい。たしかに、この通りにやればできます。
ただ、単に「こう書いてあるからやってみました」でやってみて無事できても、多分トップページしかいじれないで終わっちゃうと思うんですよね。(笑)今後のためにも、ここで少しCakePHPのリクツを理解しておく必要がある。
あと、やっぱりCakePHPにはCakePHP風の書き方ってものがあるので、ファイルを作る場合も単に白紙のファイルとして作るんじゃなく、まずはデフォルトで使われてるものをコピーして、そこから作っていった方が便利なことも多いです。
この場合も、home.ctpは白紙で充分だけど、レイアウトファイルであるdefault.ctpに関してはデフォルトのファイルをコピーして使った方が話が早い。
ただ、「デフォルトのファイルをコピー」といっても、デフォルトのファイルがどこにあるのかが問題です。そもそも今、このトップページは、どこの何ていうファイルを表示している状態なのか?
ここでCakePHPのフォルダ構成を見てみます。CakePHPの親フォルダの中には「app」や「lib」といったフォルダが入ってるんですが、この「app」が「CakePHPを使ってアプリケーションを開発していくためのフォルダ」です。我々がファイルを作ったり編集したりするのは、基本的にすべてこのフォルダの中です。
それに対して、「lib」というのはCakePHPのシステムがそのまま入っているところです。CakePHPのユーザーは「app」フォルダ内で少し命令を書くだけで、ややこしい処理の大半を「lib」内のファイルが引き受けてくれるので、比較的簡単にいろんな処理が実現できちゃうという仕組みです。
それだけに、「lib」フォルダは我々アプリケーション開発者が「いじるべきではない」領域、ということになるわけですが、じゃあブラックボックスとして単にほっとけばいいのかというと、そうではないんですね。
今みたいにデフォルトのファイルを見つけてコピーする場合はもちろんのこと、デバッグのためにソースをたどったり、ときには自作のクラスの継承元として使ったり。編集はしないが、参照は大いにする、という感じの関わり方になるわけです。
そこで「lib」フォルダも含めたCakePHP全体のフォルダ構成をよくよく見てみると、実はこれから開発を進めていく「app」フォルダって、「lib」フォルダの中の「Cake」フォルダと構成がよく似ています。

「Config」「Controller」「Model」「View」などの共通するフォルダが格納されてることがわかると思います。
これがどういうことかというと、
- CakePHPのシステムは基本的に「lib/Cake」フォルダ内のファイルを使って動作していますが、
- appフォルダ内の同じ場所に同じ名前のファイルがあった場合は、そちらを優先して使おうとします。
構成が似ているのはそのためです。なので、CakePHPがメッセージとして
このページの内容を変えたければ「APP/View/Pages/home.ctp」を作れ。
レイアウトも変えたいなら「APP/View/Layouts/default.ctp」を作れ。
といっている、というのは、要するに今現在、
このトップページの内容は「lib/Cake/View/Pages/home.ctp」に、
レイアウトは「lib/Cake/View/Layouts/default.ctp」にありますよ!
といっている、ということにほかならないわけです。従って、ユーザーが新しく「APP/View/Pages/home.ctp」や「APP/View/Layouts/default.ctp」を作れば、CakePHPはlibフォルダ内の同名のファイルの代わりにそちらを使って動こうとするはずです。
フォルダ構成がなんとなく理解できたところで、さっそく実際に白紙のhome.ctpを「APP/View/Pages」フォルダ内に作ってみることにします。
ブラウザを更新してみると、

大変スッキリとなりました。上下の青い帯がCakePHPでいう「レイアウトファイル」に依存する部分で、そこだけが残っている状態です。
続いてデフォルトのレイアウトファイル「lib/Cake/View/Layouts/default.ctp」をコピーして「APP/View/Layouts/default.ctp」を作ります。
こちらはファイルを作ったといっても中身がまったく一緒なので、ブラウザを更新してもページの見かけは上の画像のままですが、新しい方のレイアウトファイルのBODYタグ内に何か適当な文字列でも書き加えてみれば、間違いなくappフォルダ側のdefault.ctpが読み込まれているということが確認できると思います。

ここから先は、このappフォルダ側の2つのファイルを編集していくことで独自のトップページを作っていきます。
両ファイルの関係性についてですが、2つのファイルのうちレイアウトファイル(default.ctp)はトップページ以外のページにも共通する部品を書くためのファイルです。共通する部品としてはHEADタグ内の全要素に加え、ヘッダー/フッター/サイドバーなどが考えられると思います。
一方、ページ別のファイル(home.ctp)に書かれた内容はレイアウトファイル内で変数「$content_for_layout」として呼び出されるため、
の行に出現することになります。









