インストール

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

chown -R apache:apache cake/

mod_rewriteの設定

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

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

インストール後の設定

アプリ全体設定

app/config/core.php

DB接続設定

app/config/database.php.defaultのファイル名変更→database.php
'encoding' => 'utf8'

文字コードの設定

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

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

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

複数データベースの設定

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

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

命名規約

テーブル名コントローラーファイル名モデル名
cardscards_controller.phpCard
credit_cardscredit_cards_controller.phpCreditCard

命名規約上の注意

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

認証

AuthComponentがある

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

TIPS

ログの出力

$this->log("ログ");
app/tmp/log/以下に出力

外部ファイルの読み込み

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

echo get_include_path();

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

View関連

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

Model関連

キャッシュについて

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

Insert方法

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

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

リレーションをたどらない。

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

$this->Model->recursive = 0;

その他

ファイルの場所情報

CAKE_HOME/app/tmp/logs

使わないシリーズ

Viewを使わない

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

$this->autoRender = false;

Layoutを使わない

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

$this->layout = '';

Modelを使わない

$uses = null

ModelでTableを使わない。

var $useTable = false;

トラブルシューティング

PHPの対応バージョンの問題

DB接続を有効にしたら真っ白

CakePHP Modelに沿ったDB定義

MySQL

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定義

チュートリアルは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

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

インストール後のトラブルシューティング

1.3系

strtotime()でエラー

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

/**
 * 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系

1.3とほぼ同じ

  1. timezoneの設定
  2. security.saltの変更
  3. tmpの権限変更
  4. Allow Overrideの設定
  5. database.phpの作成

2.4系への移行メモ

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

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

3.0系移行

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

設定系

データベースアクセス


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS