いまさらながらcakePHP入門。その1


Symfonyの応用でなんとかかんとか修正はできるんだけど1から構築となれば話は違う。
人に指示しておいて自分が出来ないと悲しいのでちゃんと入門してみる。
あとでレポートにして会社でも共有しようかなぁ

http://cakephp.jp/
からまずはダウンロードしてみた。

個人的に良くやるのがコマンドプロンプト
>tree>tree.txt

ツリーの一覧を見ることが出来る。
以下が1.3.13のツリー構造か。

C:.
├─app
│ ├─config
│ │ └─schema
│ ├─controllers
│ │ └─components
│ ├─libs
│ ├─locale
│ │ └─eng
│ │ └─LC_MESSAGES
│ ├─models
│ │ ├─behaviors
│ │ └─datasources
│ ├─plugins
│ ├─tests
│ │ ├─cases
│ │ │ ├─behaviors
│ │ │ ├─components
│ │ │ ├─controllers
│ │ │ ├─helpers
│ │ │ └─models
│ │ ├─fixtures
│ │ └─groups
│ ├─tmp
│ │ ├─cache
│ │ │ ├─models
│ │ │ ├─persistent
│ │ │ └─views
│ │ ├─logs
│ │ ├─sessions
│ │ └─tests
│ ├─vendors
│ │ └─shells
│ │ ├─tasks
│ │ └─templates
│ ├─views
│ │ ├─elements
│ │ │ └─email
│ │ │ ├─html
│ │ │ └─text
│ │ ├─errors
│ │ ├─helpers
│ │ ├─layouts
│ │ │ ├─email
│ │ │ │ ├─html
│ │ │ │ └─text
│ │ │ ├─js
│ │ │ ├─rss
│ │ │ └─xml
│ │ ├─pages
│ │ └─scaffolds
│ └─webroot
│ ├─css
│ ├─files
│ ├─img
│ └─js
├─cake
│ ├─config
│ │ └─unicode
│ │ └─casefolding
│ ├─console
│ │ ├─libs
│ │ │ └─tasks
│ │ └─templates
│ │ ├─default
│ │ │ ├─actions
│ │ │ ├─classes
│ │ │ └─views
│ │ └─skel
│ │ ├─config
│ │ │ └─schema
│ │ ├─controllers
│ │ │ └─components
│ │ ├─libs
│ │ ├─locale
│ │ │ └─eng
│ │ │ └─LC_MESSAGES
│ │ ├─models
│ │ │ ├─behaviors
│ │ │ └─datasources
│ │ ├─plugins
│ │ ├─tests
│ │ │ ├─cases
│ │ │ │ ├─behaviors
│ │ │ │ ├─components
│ │ │ │ ├─controllers
│ │ │ │ ├─datasources
│ │ │ │ ├─helpers
│ │ │ │ ├─models
│ │ │ │ └─shells
│ │ │ ├─fixtures
│ │ │ └─groups
│ │ ├─tmp
│ │ │ ├─cache
│ │ │ │ ├─models
│ │ │ │ ├─persistent
│ │ │ │ └─views
│ │ │ ├─logs
│ │ │ ├─sessions
│ │ │ └─tests
│ │ ├─vendors
│ │ │ └─shells
│ │ │ └─tasks
│ │ ├─views
│ │ │ ├─elements
│ │ │ │ └─email
│ │ │ │ ├─html
│ │ │ │ └─text
│ │ │ ├─errors
│ │ │ ├─helpers
│ │ │ ├─layouts
│ │ │ │ ├─email
│ │ │ │ │ ├─html
│ │ │ │ │ └─text
│ │ │ │ ├─js
│ │ │ │ ├─rss
│ │ │ │ └─xml
│ │ │ ├─pages
│ │ │ └─scaffolds
│ │ └─webroot
│ │ ├─css
│ │ ├─img
│ │ └─js
│ ├─libs
│ │ ├─cache
│ │ ├─controller
│ │ │ └─components
│ │ ├─log
│ │ ├─model
│ │ │ ├─behaviors
│ │ │ └─datasources
│ │ │ └─dbo
│ │ └─view
│ │ ├─elements
│ │ │ └─email
│ │ │ ├─html
│ │ │ └─text
│ │ ├─errors
│ │ ├─helpers
│ │ ├─layouts
│ │ │ ├─email
│ │ │ │ ├─html
│ │ │ │ └─text
│ │ │ ├─js
│ │ │ ├─rss
│ │ │ └─xml
│ │ ├─pages
│ │ └─scaffolds
│ └─tests...
├─plugins
└─vendors
└─shells
├─tasks
└─templates

なるほど。ざっくりは確認した。
cakeディレクトリ下がフレームワークのソースで
app下がアプリソースなのね。
じゃapp下だけを見ていこう。

├─app
│ ├─config
│ │ └─schema
│ ├─controllers
│ │ └─components
│ ├─libs
│ ├─locale
│ │ └─eng
│ │ └─LC_MESSAGES
│ ├─models
│ │ ├─behaviors
│ │ └─datasources
│ ├─plugins
│ ├─tests
│ │ ├─cases
│ │ │ ├─behaviors
│ │ │ ├─components
│ │ │ ├─controllers
│ │ │ ├─helpers
│ │ │ └─models
│ │ ├─fixtures
│ │ └─groups
│ ├─tmp
│ │ ├─cache
│ │ │ ├─models
│ │ │ ├─persistent
│ │ │ └─views
│ │ ├─logs
│ │ ├─sessions
│ │ └─tests
│ ├─vendors
│ │ └─shells
│ │ ├─tasks
│ │ └─templates
│ ├─views
│ │ ├─elements
│ │ │ └─email
│ │ │ ├─html
│ │ │ └─text
│ │ ├─errors
│ │ ├─helpers
│ │ ├─layouts
│ │ │ ├─email
│ │ │ │ ├─html
│ │ │ │ └─text
│ │ │ ├─js
│ │ │ ├─rss
│ │ │ └─xml
│ │ ├─pages
│ │ └─scaffolds
│ └─webroot
│ ├─css
│ ├─files
│ ├─img
│ └─js


MVC的に割りと分かり易いな。
controllersがC
modelsがM
viewsがVか。
まんまだー。

他のディレクトリは
│ ├─config
│ ├─libs
│ ├─locale
│ ├─plugins
│ ├─tests
│ ├─tmp
│ ├─vendors
│ └─webroot
か。
一応一個一個目算をつけておくと
configは設定
libsは共通のいわゆるライブラリ系。共通のクラスとか分類しにくいものを入れたりするのかも。
localeはローカライズなのかな?よくわからん。
pluginsは名前のままでプラグインだろう。
testsは、テスト。
tmpは、、まぁテンポラリだから気にしなくていいかな
vendorsはイマイチヨクワカラナイ
webrootは、CSSとかを格納したり、htmlを置いたりするのかな。
名前の通りかも。ようするにこのディレクトリをApacheのhomeにしておけばいいのか。

親切なマニュアルが結構ある。Symfonyはえらい違いだ・・・w
http://book.cakephp.org/ja/view/879/CakePHP%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86
一応ざーっと目を通す。


http://book.cakephp.org/ja/view/899/CakePHP%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E9%80%A0
に全部書いてあった。
config CakePHP が使用する(数個の)設定ファイルが入る場所です。データベース接続の詳細、ブートストラップ、コアの設定ファイルなどがここに入ります。
controllers アプリケーションのコントローラとコンポーネントが入ります。
libs サードパーティ、外部ベンダからのライブラリではなく、ファーストパーティのライブラリが入ります。これはベンダライブラリと内部ライブラリの構成を分割することを可能にします。
locale 国際化のための文字ファイルが入ります。
models アプリケーションのモデル、ビヘイビア、データソースが入ります。
plugins プラグインパッケージが入ります。
tmp CakePHP が一時的なデータを保管する場所です。保管される実際のデータは、CakePHP の設定しだいですが、このフォルダは通常、モデルの内容データや、ログの保管に使用されます。時にはセッション情報も入ります。
確実にこのフォルダが存在し、書き込み可能であるようにしてください。そうしないと、アプリケーションのパフォーマンスは激しく影響をうけることになります。デバッグモードでは、CakePHPがそうなっているかどうかを警告してくれます。
vendors 外部(サードパーティ)で作成されたクラスやライブラリは、ここに置いてください。そうすることで、App::import('vendor', 'name') で簡単にアクセスできるようになります。注意して観察している人は、これは重複しているのではないか、と言うかもしれません。ディレクトリ構造のいちばん上にも vendors フォルダがあるからです。この二つのフォルダの違いは、複数のアプリケーションを動作させて、より複雑なシステムセットアップをする場合のことを考える際に扱いましょう。
views 表示用のファイルはここに置きます。エレメント、エラーページ、ヘルパー、レイアウト、ビューのファイルなどです。
webroot 運用時(production)用のセットアップでは、このフォルダがアプリケーションのドキュメントルートになります。CSS スタイルシートや画像、JavaScript を入れるためのフォルダもあります。
だそうだ。
なるほどね。

お、規約がある。
http://book.cakephp.org/ja/view/902/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%82%AF%E3%83%A9%E3%82%B9%E5%90%8D%E3%81%AE%E8%A6%8F%E7%B4%84
へーなるほど。
クラス名がキャメル(CamelCased)でファイル名はアンダースコアか。
>各ファイルは、 app フォルダ内のそれぞれ適切なフォルダの中かその下(サブフォルダも可)に設置します。
って書いてあるから、オートロードが有効なのかも?

http://book.cakephp.org/ja/view/903/%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E8%A6%8F%E7%B4%84
>hasMany, blongsTo, hasOne 中の外部キーは、デフォルトで関連するモデルの(単数形の)名前に _id を付けたものとして認識されます。ケーキ職人(Backer)がケーキ(Cake)を複数持っている(hasMany)としたら、cakes テーブルは、baker_id を外部キーとして bakers テーブルのデータを参照します。categoly_types のような複数の単語のテーブルでは、外部キーは categoty_type_id のようになるでしょう。 For a multiple worded table like category_types, the foreign key would be category_type_id.

>モデル間の hasAndBelongsToMany (HABTM) の関係で使用される join テーブルは、join するテーブルに合わせて、アルファベット順に(zebras_apples ではなく、apples_zebras)並べた名前にしてください。
へー細かいなーメモメモ

あらら複数主キーをサポートしないのか。

今日はここまでかなー