CakePHP †
CakePHP2.0 †
OAuth †
html解析 †
Fatal error: session_start() †
- CakePHPでユーザセッションハンドラを設定した時に初回だけエラーになる。
- app/config/sess_user.php
ユーザ定義のセッション処理
Modell::create()でbool型がstring型で戻る対策 †
- bool型が (string)"true" or (string)"false"で返却されるので$form->input()でデフォルト値が常にtrueになる対策
- app/app_model.php
function create($data = array(), $filterKey = false)
{
parent::create($data, $filterKey);
$alias = $this->alias;
foreach($this->schema() as $field => $properties){
if($properties['type'] == 'boolean'){
// bool型が (string)"true"で返却されるので$form->input()でデフォルト値が常にtrueになる対策
$this->data[$alias][$field] = $this->db()->boolean($this->data[$alias][$field]);
}
}
return $this->data;
}
モデル::read() するとエラーが表示されない †
- 対策。app_model.phpに追加
public function myread($id, $fields = array())
{
$conditions = array(
'conditions' => array($this->alias . '.' . $this->primaryKey => $id),
);
if (!empty($fields)) {
$conditions['fields'] = $fields;
}
return $this->find('first', $conditions);
}
キャッシュの複数設定 †
Configure::write('Cache.disable', false); // サイト全体のキャッシュを有効に
Configure::write('Cache.check', true); // viewキャッシュのチェックを有効に
// short
Cache::config('short', array(
'engine' => 'File', // キャッシュエンジン (デフォルト:File)
'duration'=> '+2 hours', // キャッシュ期間(デフォルト:3600 秒) strtotime()で使える文字列
'probability'=> 100, // ガベージコレクタの起動確率(デフォルト:100)
'path' => CACHE, // キャッシュディレクトリ(デフォルト:CACHE)
'prefix' => 'cake_', // キャッシュファイルに付ける接頭語
'lock' => false, // write時にロックするか(デフォルト:false)
'serialize' => true) // シリアライズするか。(デフォルト:true)
);
// medium
Cache::config('medium', array(
'engine' => 'File',
'duration'=> '+1 day',
'probability'=> 100,
'path' => CACHE,
'prefix' => 'cake_',
'lock' => false,
'serialize' => true)
);
// long
Cache::config('long', array(
'engine' => 'File',
'duration'=> '+1 week',
'probability'=> 100,
'path' => CACHE,
'prefix' => 'cake_',
'lock' => false,
'serialize' => true)
);
// default = medium
Cache::config('default', Cache::config('medium'));
if (!$cachedata = Cache::read(('cache_key','short')) {
// retrieve data if cache is empty
$data = $this->Model->read(null, $id);
Cache::write('cache_key', $data, 'short');
}
- Cache::config('設定名')のように第二引数を省略すると、現在の設定が取得できる。
- Cache::settings('File')のようにエンジンを指定すると、エンジン毎の現在の設定が取得できる。
携帯サイトを作る際の注意点 †
携帯でsession.use_trans_sid=1だと、セッション文字列が消える不具合 †
SQLエラーを取得 †
AuthComponentと連携してcreated_by, modified_byを保存するビヘイビア †
- Authコンポーネントで認証済みのUser.idが、自動でモデルに保存するビヘイビアがありました。
query() fetchRow()の結果がMySQLとPostgreSQLで違う †
- PostgreSQLでquery() fetchRow()を実行するとキーとしてのテーブル名が無い
- 原因
- PostgreSQLは dbo_postgres.php DboPostgres::resultSet()で pg_field_name() を使用しているが、フィールド名しか取れない。フィールド名からテーブル情報を取得する関数が無い。`'テーブル名__フィールド名'`の場合にテーブル名が入る。
- MySQLは dbo_mysql.php :: で mysql_fetch_field() を使用しているので、テーブル名も取得できる。
- 解決方法
- find()を使うと結果は同じになる。
- `'select "User__id", "User__username" from users'`のように「モデル__カラム」とする
- CakePHP 1.2.1.8004
- CentOS5.2
- php 5.1.6
- MySQL 5.0.45
- PostgreSQL 8.1.11
- 結果:MySQL
array (
0 =>
array (
'users' =>
array (
'id' => '1',
'username' => 'test1',
),
),
)
- 結果:PostgreSQL
array (
0 =>
array (
0 =>
array (
'id' => '5',
'username' => 'test1',
),
),
)