CakePHP の学習するうえで押さえておきたいポイントをまとめています。
- 主キーには複数の列を割り当てる複合キーの指定はできない。主キーの列は一つのみである。通常主キーの名前は id 固定とする。これは必須である。
- 外部キーの名前は、テーブル名の単数形_id である。customers テーブルの主キー (id) に対する外部キーは customer_id となる。
- 主キーとして id を使うことにはなるが、独自に作成するシステム上の仕様は別に項目を設けて使えばよい。例えば、商品コードで昇順にしたいときには、trade_cd という列を設けて扱うことになる。
- 列名 created, modified は自動的にレコードの作成日時と更新日時となる。
- 列名に name や title が含まれていると、自動的に DisplayField として認識される。
- bake を2回以上実行すると、ファイルの上書きを聞いてくる。煩わしいので、app ディレクトリにある test ディレクトリは事前に削除しておくとよい。bake で自動的に全部再作成してくれる。
- ファイルをダウンロードする機能を実装するには、response メソッドを使用する。(A76)
- 入力チェックはバリデーション (validation) と言って、エラーチェックのルールを記述するだけでエラーチェック処理をすることができる。記述はモデルで行う。通常のプログラミング言語のように if でフィールドの値を参照してチェックするようなコードは書かない。しかしながら、独自のチェックメソッドを実行したい場合にはメソッドを作って呼び出すこともできる。(A130)
- 一度 bake で作った後、テーブル名を変更するなどファイルを全体的に書き直す必要がある。ファイルの一括置換をする場合には、大文字と小文字をしっかりと区別して行うこと。
- データベースのテーブルを作成するスキーマファイルは、app/Config/Schema/schema.php である。実行するには、app\Console\cake schema create である。但し、データベースは作ってくれないので、phpMyAdmin などを利用して事前に作成しておく。中身は空でよい。
- scaffold を使うと、ほぼ全自動で CRUD の機能を持った画面ができる。コントローラなどのファイルにはメソッドなどは特に定義されていない。独自に上書きする場合はメソッドを追加すればよい。追加したメソッドが優先される。
- 関連モデルは n:n のアソシエーションを実現するためのものである。
- 関連モデルのコントローラ、ビューは作成不要である。
- ページング処理は、コンポーネントの PaginatorComponent とビューの PaginatorHelper が連携して実現する。(A77)
- コンポーネントはコントロールの共通処理、ビヘイビアはモデルの共通処理。レイアウトはビューの共通デザイン。
- bake による作成または自作コントローラは、app/Controller/AppController.php を読み込む。共通処理はこのファイルに書けばよい。
- bake による作成または自作モデルは、app/Model/AppModel.php を読み込む。共通処理はこのファイルに書けばよい。
- bake による作成または自作ビューは、app/View/Layouts/default.ctp を使って画面表示する。共通のデザイン処理はこのファイルに書けばよい。
- 保存時に自動的にモデルに記述されたバリデーションの定義によりエラーチェックが行われる。保存前に意図的にチェックをしたい場合には、モデル名->validates メソッドを実行する。(A66)
- add, edit, view アクションに対するビューテンプレートは存在するが、delete に対するものはない。データ削除時はアラートにより確認する処理のみのため。
- コントローラのメソッド名の先頭にアンダースコア (_) を付けると、内部共通処理用のメソッド専用となる。url に直接入力しても実行されることはない。
- コントローラからビューへデータを引き渡す場合には、set メソッドを使用する。(A67)
- コールバックメソッドとは、メソッドの実行前後に自動的に実行されるメソッドのこと。全メソッドの共通処理を行うことが可能。
- コンポーネントの宣言はコントローラで、ビヘイビアの宣言はモデルで、ヘルパーの宣言はコントローラで行う。
- app/webroot ディレクトリが静的なコンテンツを置くところ。例えば、普通の html ファイルや画像ファイルなど。css, js ディレクトリも標準で配置されているので、必要に応じてこのディレクトリに配置する。
- app/console/cake コマンドのよく使うオプションは、bake, i18n schema がある。
- 開発中に変数の値 ($val) を参照したいときには、debug($val); を使えばよい。コントローラでもビューでもどちらでも実行できる。
- 変数名を複数形にするか単数形にするかもルールがあるようだ。格納するデータが複数件なのか1件なのかも意識したい。例えば、index.ctp に送るデータは複数だが、view.ctp に送るデータは1件だ。
- レイアウト (default.ctp) に定義されている変数 ($title_for_layout) にもコントローラから値を渡すことができる。