アーカイブ

‘メモ’ タグのついている投稿

cakePHP1.3再入門#1

2010 年 5 月 31 日 Jiro コメントはありません

しばらくcakePHPから遠ざかっていたらVar1.3安定版が出ていました。

新規に1.3をインストールして、再度初心に帰って再入門します。ということで、いつもの覚書と言うかメモです。

ダウンロード
cakePHP日本語サイトのトップに1.3.0 stableのDOWNLOADがあります。
cakephp-cakephp1x-1.3.0-0-g1c06478.zipと言うファイルを落としてきて解凍チン!!。

テスト環境はxamppを使っているのでxampp/htdocs/以下に今回テスト用のktaiというディレクトリを作って中身をコピー。

とりあえず、このままfirefoxでhttp://localhost/ktai/を打ち込む。
まずエラーページが表示される。
cakePHP初期画面

まずは、お決まりのエラーですが、ちょっと新しいのが出ているのかな。
‘Security.cipherSeed’って無かったような気がする。

背景が黄色の部分がエラーです。
3箇所出ています。
最初の二つについては/app/config/core.phpを編集しないといけません。

「Security.salt」の定数がデフォルトだとみんなに知られていますから変更しろとのこと。

198行目の

Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

を書き換えます。
DYhG93b0q…の部分を適当に書き換えます。この値はハッシュの作成に使われます。

CookBookの1.3を見ると CIPHER_SEEDがSecurity.cipherSeedに書き換えられたみたい。なんのことやらw
どうも乱数発生時の種みたいですね。これも適当な数字に書き換えましょう。

203行目の

Configure::write('Security.cipherSeed', '76859309657453542496749683645');

これでさっきの画面をリロードしたら、上の二つはグリーンになります。

3番目のメッセージはデータベースに関する設定をしろってことで、config/database.php.default を config/database.phpにリネームして中身をいじくることになります。

class DATABASE_CONFIG {

	var $default = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'database_name',
		'prefix' => '',
	);

	var $test = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'test_database_name',
		'prefix' => '',
	);
}

$defaultが普通の設定 $testはテストの時なんかに別のDB使うときの設定って認識でいいと思います。
複数のDBなんか同時に使うことはないと思うけど。

ちなみにモデルの定義の中で

$this->useDbConfig = 'test';

とすると$testの定義を使ってくれるので、色々作っておいてモデルごとに使い分けることも出来るみたい。
Bakeとかでも自動判別するんだろうなあ。

[設定]
driverはMySQLなのでそのまま、persistentは持続的データベース接続ってことらしい。
ここに説明が書いてるけど、よく理解して使わないとちょっと怖そう。デフォルトどおりfalseにしておく。
hostはlocalhostのまま、本番動作時はレンタルサーバーとかの指定によって書き換えよう。
loginはMySQLのログインユーザー名、passwordはそのパスワード、databaseは使用するデータベース名。
prefixは接頭語だけど、いらないので省略。

こんな感じでdatabase.phpを書き換えたらOKかな。

設定とりあえずOK

とりあえず初期設定の一部が済みました。使用するデータベースはphpMyAdminとかで先に作成しておいたほうがいいですね。

カテゴリー: cakePHP タグ: , ,

cakePHP覚書#4

2010 年 3 月 4 日 Jiro コメントはありません

ひとつのモデルの中で関数を作成して簡単に利用したいと思ったのですが、結果を返す際に
他のモデルも参照しなくちゃいけなくなりました。
このあたりは、アソシエーションを使ったほうが良いのかもしれませんが、データベースの作成がまずくて
うまく出来そうに無いので、モデル内の関数で他のモデルを呼び出して見ました。

$this->loadModel('ModelA');

これは、やはりダメでした。

importでmodelを呼び出して使うみたい。

App::import('Model','modelA');
$modelA = new modelA;
$modelA->find($conditions,null,$orders);

こんな感じでいいようです。さて今から検証。

検証の結果うまくいきました。上記App::import(‘model’と小文字になっていたところを訂正。

モデルの中で他のモデル呼び出すって、ちょっと邪道かなという気もします。

componentあたりに関数作成したほうがいいかもしれませんね。

また、コントローラの中でusesでたくさんのモデル定義していると使わなくてもSQLが走っているようです。

基本になるモデルひとつだけusesで定義しておくか、$uses=null;にしておいて、必要なアクションで必要なモデルを

loadModelしたほうが良い気がしますね。

まだパフォーマンスを上げる段階ではないですが、一通り動作するようになれば、次はパフォーマンス向上が大事だと思います。

現在はWindowsXPの非力なマシン上でXampp環境でのテストですが、ファンが唸ってますからねw

本番では随分昔のDellサーバーに乗せる予定です。こっちも非力ですからね。

カテゴリー: cakePHP タグ: ,

cakePHP覚書#3

2010 年 3 月 2 日 Jiro コメントはありません

連想配列(modelの内容をDBからとってきたもの)の配列。要は複数レコードを入れた配列なんですが、

foreachで回して、項目を変更したのだけど、元の配列自体に変更が及んでいないようで、その後saveAllしても

DBに反映されていない。

for文で直接もとの配列を書き直してみよう。

foreach ($bs as $b){
	$b['model']['data'] = "test";
}

こういう風にすると「$bs」のなかみ$bs[0]['model']['data']は書き換えられなかった。

for ($i=0;$i<count($bs);$i++){
	$bs[$i]['model']['data']="test";
}

こうしたらうまく書き換えてくれた。

findなどでデータベースのレコードを取得する場合の条件の書き方でくだらないミス。

$conditions = array('nenrei>' => $nenrei);

フィールド名と比較演算子の間のスペース忘れると変なことになる。

where 'nenrei>' = 1

比較演算子がフィールド名の一部と誤認識される。つーか、空白で区切らないと当たり前のことですね。ww

カテゴリー: cakePHP タグ: ,
Get Adobe Flash playerPlugin by wpburn.com wordpress themes