インストール

DocumentRoot以下に解凍して、書き込み権限を与えるのみ

chown -R apache:apache cake/

mod_rewriteの設定

インストールディレクトリの.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

認証

AuthComponentがある

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

TIPS

外部ファイルの読み込み

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関連

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


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