-世界的にはシェアが大きいPHPフレームワーク。特に記載がない限り1.2-1.3系に関しての記事

#contents

*インストール [#t69d6482]

DocumentRoot以下に解凍して、書き込み権限を与えるのみ。xamppであればそのままインストール後の設定に進むべし

 chown -R apache:apache cake/

**mod_rewriteの設定 [#kc62b62d]

そのままだとCSSが効かず、
インストールディレクトリの.htaccessにrewriteの設定がされている。
この設定を利用できたほうが何かと便利なのでインストールディレクトリに以下の設定を入れておく。

 <Directory "/var/www/html/CAKE_INSTALL_DIR">
        AllowOverride FileInfo
 </Directory>

*インストール後の設定 [#n5b2fbd5]

**アプリ全体設定 [#ge76ef1c]

 app/config/core.php

-Security.Saltの文字列変更
-date_default_timezone_set('UTC')をTokyo/Asiaへ; (PHP 5.3の場合)


**DB接続設定 [#w3544bb6]

 app/config/database.php.defaultのファイル名変更→database.php

-文字化けを防ぐために以下の設定を追加しておくことを進める。

 'encoding' => 'utf8'

**文字コードの設定 [#s1e81c4d]

全部共通の文字コードはapp/config/core.php

 Configure::write('App.encoding', 'euc-jp');

個別には$html->charset('utf-8')で設定できそうだけど、どこで設定するのかな?

**複数データベースの設定 [#q6c0e494]

modelにデータベースを指定する。何も書かないと当然デフォルトのDBを使う。

**DBのエンコーディングと出力エンコーディングが違うときどうしましょ? [#md925e28]

*命名規約 [#a5902397]

-DBのテーブルとModelの関係

|テーブル名|コントローラーファイル名|モデル名|
|cards|cards_controller.php|Card|
|credit_cards|credit_cards_controller.php|CreditCard|

**命名規約上の注意 [#ea18a33c]

英単語で分割可能なテーブル名は勝手に分解解釈される。
Highwaysテーブルだとhigh_waysとしてテーブルを作成しないとダメ。
外部結合用のキーフィールド名もテーブルに合わせる必要があるので、まずはモデルを作成して、scaffoldの空コントローラを作成後、テーブル名がCakePHP的に正しいかをチェックしたほうが良い。


*認証 [#r2564106]

AuthComponentがある

http://blog.ne2ma2.com/archives/160

*TIPS [#j55b2b95]

**ログの出力 [#a5ed255c]

 $this->log("ログ");

 app/tmp/log/以下に出力

**外部ファイルの読み込み [#jaf7a2f7]

-App::importを使う。

app/libにおいておくと以下のようにインポートできる。



-Cakephpのinclude_pathは以下のコマンドで取得できる。しかし

 echo get_include_path();

初期状態ではcakeのROOTとappのディレクトリとPHPのinclude_pathのディレクトリが表示されるはず。

-



**View関連 [#o3afca81]

|ページのタイトル|$pageTitle変数を設定|
|POSTの取得|$params['form']|
|GETの取得|$params['url']['hoge']|
|セッションkeyの存在チェック|$this->Session->check('key')|


**Model関連 [#dca31b46]

***キャッシュについて [#y9fa341a]

毎回DB構造を解析しているのは無駄なので、debugモードの時は15秒、それ以外は999日テーブル構造をキャッシュしている。列変更の時は削除を忘れずに!

***Insert方法 [#k9a2330e]

新規作成時はフィールド名を持つ連想配列を用意して、saveメソッドを呼ぶ。

 $data = array("name" => "test");
 $this->Model->create();
 $this->Model->save($data);

-検索結果の取得が一件だけならfind('first')、連想配列がシンプルになる。

-直前にインサートしたID取得にはgetLastInsertID

-外部キーとして結合する場合に表示するフィールドを$displayFieldで指定できる。
-外部キーとして結合する場合に表示するフィールドを$displayFieldで指定できる。ただし何もしなくてもよいnameにしておくのが楽。

var $displayField = 'device_name';



***リレーションをたどらない。 [#qf6f730b]

リレーションが不要な場合はパフォーマンスのため以下のコードでリレーションを取得しないようにできる。

 $this->Model->recursive = 0;

*その他 [#l2fcf7e7]

**ファイルの場所情報 [#k686a6e0]

-ログファイル

 CAKE_HOME/app/tmp/logs


*使わないシリーズ [#ia3af68a]

**Viewを使わない [#e72ffd2d]

各functionの中で以下のように記述

 $this->autoRender = false;

**Layoutを使わない [#fe65832d]

contorollerの中で以下のように記述

 $this->layout = '';

**Modelを使わない [#v61341a4]

$uses = null

**ModelでTableを使わない。 [#j3e9480a]

var $useTable = false;


*トラブルシューティング [#k69a7a62]

**PHPの対応バージョンの問題 [#a5b0ff10]

-5.1.6 CentOS5.3 動作実績有り
-4.3.9 CentOS4.8 動作実績有りだが、セッションがつながらない不具合あり

**DB接続を有効にしたら真っ白 [#p050686f]

-PHPのDB接続モジュールが入っていないとまったくの手がかりなくエラーとなる。モジュール入れれば解消。

*CakePHP Modelに沿ったDB定義 [#n824d5ab]

-Modelが単数形でテーブル名は複数形となる。なので英語がよろしい。
-IDはつけた方が良い。IDに意味を持たせないサロゲートキー的に使う。
-


**MySQL [#xfe038fe]

 CREATE TABLE users(
    id int unsigned auto_increment primary key,
    nickname varchar(30) NOT NULL,
    created datetime default NULL,
    modified datetime default NULL
 );

 CREATE TABLE profiles(
    id int unsigned auto_increment primary key,
    user_id int unsigned unique,
    blog_url varchar(256),
    hobby varchar(256),
    created datetime default NULL,
    modified datetime default NULL
 );


**PostgreSQLでTable定義 [#tf880807]

チュートリアルはMySQLしか乗っておらず、日本ではPostgresがまだまだ使われているので記述しておく。


 CREATE SEQUENCE car_id_seq;
 drop table cars;
 CREATE TABLE cars (
 id INTEGER  DEFAULT nextval('cars_id_seq') PRIMARY KEY,
  car_id VARCHAR(50),
  comment TEXT,
  created TIMESTAMP DEFAULT NULL,
  modified TIMESTAMP DEFAULT NULL
 );


*Link [#g5a580d9]

http://www.syuhari.jp/blog/archives/6


*インストール後のトラブルシューティング [#ae0225a6]

**1.3系 [#f0b8477c]

***strtotime()でエラー [#u5cf932f]

-PHP5.3でcore.phpが解凍そのままだとエラーが出てしまうことがあった。

Warning (2): strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead [CORE/cake/libs/cache.php, line 597] Notice: Trying to get property of non-object in /var/www/html/mogi/cake/libs/cache/file.php on line 248 Fatal error: Call to a member function cd() on a non-object in /var/www/html/mogi/cake/libs/cache/file.php on line 248

-config/core.phpのtimezoneを修正


 /**
  * If you are on PHP 5.3 uncomment this line and correct your server timezone
  * to fix the date & time related errors.
  */
        date_default_timezone_set('Asia/Tokyo');

*2.4系 [#e4eb2460]

1.3とほぼ同じ

+timezoneの設定
+security.saltの変更
+tmpの権限変更
+Allow Overrideの設定
+database.phpの作成

**2.4系への移行メモ [#wb110dff]

ブラウザキャッシュが強すぎて、一回エラー画面を出してしまうと、ファイルを置いてお反応しないことが多数なので注意。

+ファイル命名ルールの変更
+Htmlヘルパーの変更
+Modelのアソシエーションが効かない(おそらくファイル命名が悪い)
+バッチの置き場ががらりと変わっていた。コードはそのまま動いたが

**3.0系移行 [#c6f80c3c]

今回もがっつり変わっているので移行が大変。

***設定系 [#p9e3564e]



***データベースアクセス [#w3f4739d]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS