トップページ⇒php
985コメント290KB

【PHP】フレームワーク CakePHP 5ホール目【v1.2】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/12/19(金) 15:52:19ID:ylogT+7c
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
cookbook(マニュアル)
http://book.cakephp.org/ja
the Bakery
http://bakery.cakephp.org/

■日本語フォーラム
http://cakephp.jp/


■過去スレ
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0508nobodyさん2009/01/26(月) 16:40:15ID:j8WtT0GU
これってやばいんだよね?
0509nobodyさん2009/01/26(月) 20:39:14ID:???
testsuiteって使ってる?
マニュアル見ても、よく分からん。
0510nobodyさん2009/01/26(月) 22:55:14ID:???
>>508
機能として破綻してるw
0511nobodyさん2009/01/26(月) 23:57:03ID:???
ああー
よくわからんままやったら、
フィールド消えたわ
まじか、これ
0512nobodyさん2009/01/27(火) 10:11:27ID:???
バグが取れるまでstableにしませんとか誇らしげに語ってなかったっけ?w
0513nobodyさん2009/01/27(火) 11:51:11ID:???
>511はtestsuiteの話しな

testsuiteの解説がガイドブックとかに無いし、
web上にもあんまり情報が無いので、よくわからん。
でも。simpletestをインスコしたら、bakeの際に
いろいろ聞かれなくなったのは楽だな。
0514nobodyさん2009/01/27(火) 12:20:04ID:???
1.2.1.8004 Stable ですが

設置 URL が example.jp/t/ の時、tests というコントローラにアクセスしようと、

http://example.jp/t/tests/ ってやると、http://example.jp/t/ests/ に勝手になってしまって

Error: EstsController could not be found.

となります。 t に限らず webrootが1文字で とコントローラの最初の一文字が同じだと
上記のようになると思いますが、何か注意するところはありますか?
0515nobodyさん2009/01/27(火) 12:32:20ID:???
>>514
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1706&forum=6&post_id=4025#forumpost4025
これと同じかな
0516nobodyさん2009/01/28(水) 11:36:58ID:AHb2WVE2
既存テーブル名が日本語で、cakeが認識しません。
どうすればいいのでしょうか?
php直ですと日本語テーブル名でクエリは通ります。
0517nobodyさん2009/01/28(水) 12:33:02ID:???
cake周りの文字コードをutf-8にしたら
とりあえず、認識した。
0518nobodyさん2009/01/28(水) 18:06:35ID:???
テーブル名が日本語ってトラブルの元じゃない? って、以前言われた。

testって、データを入れて出して一致してるか確認してるんだって事が
ようやく少し分かった。
0519nobodyさん2009/01/28(水) 18:29:34ID:???
テーブルとかカラムが全角文字だと激怒する奴いるけど
別に日本で使うシステムなら問題ないんだけどな
Oracle/Access+VBのシステムなんかよくあるし
PHPだって変数名ですら全角文字でもOKなんだし
0520nobodyさん2009/01/28(水) 19:00:41ID:???
>>519
全角って、そんなに変じゃないの?
bakeする時に日本語で全部作ってくれると楽そうだなーって思ってた。
多言語化を考える必要なんて全くない物を作るのにi18nすら面倒で、
ソースに日本語のエラーメッセージを書いてやろうと思ってた。
0521nobodyさん2009/01/28(水) 19:02:34ID:???
あ。でも、そうすると複数形ってどうすんだ?
0522nobodyさん2009/01/28(水) 19:04:55ID:???
DB関連の開発系ツールも含めて全て対応出来てるんならいいんだろうけど
海外製のライブラリは対応出来てないものが多いし
結局、全角ゴリ押しは開発者側に負担を強いることが多いよ
プロジェクト内で使う環境を全部調査して、誰にも迷惑かけないと判明したら使えばいいと思うけど
0523nobodyさん2009/01/28(水) 19:05:44ID:???
>>521
個別テーブル名定義で対応するしかないと思う
やったことないし試そうとも思わないから詳しくは知らない
0524nobodyさん2009/01/28(水) 20:22:20ID:???
早速、日本語名utf8のテーブルやフィールドを作って、
cake bake allしてみた。
コンソールは微妙に文字化けしてたけど、難なく焼けた。
でも、アクセスしたらエラーが出た。ファイルを見たら、
ファイルがshift jisで認識されて、日本語部分は全部文字化け。

こんなことで苦労したくないので、これ以上は試すの止める。
0525nobodyさん2009/01/29(木) 05:37:51ID:???
CakePHPは使ったことがありませんが、非常に興味があり質問させて
いただきます。

今まで自作の簡易フレームワークで業務アプリを作ってきました。
画面数は数十あります。
表示はSmartyを使っています。

これを少しづつCakePHPに置き換えたいと考えていますが、
フレームワークを変更するとかなり大掛かりな作業になりそう
ですし、部分的に置き換えていくのが実際できるのかわかりません。

CakePHPは、上述のように既存のWebアプリを部分的に置き換えていける
ものなのでしょうか?
それとも、新規Webアプリから採用するべきものなのでしょうか?


0526nobodyさん2009/01/29(木) 11:43:51ID:???
>>525
新規案件だけにしたほうが苦労が少なくていいと思う
0527nobodyさん2009/01/29(木) 11:51:59ID:???
>>525 思いついたところから書くと

最低クリアされるべき条件
・DBの構造(idとか)
・URL(/controller/action/param.. の形式)
がクリアされないといけない

そのうえで、Modelごと(≒tableごと)移行していくというのであれば、不可能ではないと思うが。

現実的には、DBを共通化して、Cakeによるサイトを作っていき、同時に稼働させてテストし、一気にリプレイスってことになりそうな気がするけど、どうなんだろうね。

ただ、Cakeに慣れるまである程度時間がかかるから、いずれにせよ新規アプリから始めないと、苦労すると思うよ。
05285252009/01/30(金) 06:58:44ID:???
>>526, 527
レスありがとうございました。
やはり新規案件からCakePHPをはじめたほうが無難ですね。
スキルを醸成してから、既存システムの変更を検討します。
0529nobodyさん2009/01/30(金) 11:51:03ID:???
自作クラスのインスタンスを得るにはどうすればいいの?

データを引数に持たせてインスタンス同士をいろいろ比較してくれるクラスを
昔作ったんだけどどう持ち込めばいいのかわからない
0530nobodyさん2009/01/30(金) 17:53:58ID:???
ポケットリファレンスを見てるんだが。
1.2になってModel::findが大幅に機能強化されたのに、
記述が少なすぎる。もしくは、Model::generateList()
のページに代わりの方法が書いてあればいいが、
Model::find()だけでは意味不明だろう。
0531nobodyさん2009/01/30(金) 18:27:52ID:???
>>530
おとなしく改訂版を待ってろ
0532nobodyさん2009/01/30(金) 18:55:05ID:???
改訂版って出るの?
0533nobodyさん2009/01/30(金) 19:21:00ID:???
コントローラから2つのモデルとデータをやり取りする場合、
アソシエーションを使う方がいいのか、
Controller::usesで直接指定する方がいいのか。
0534nobodyさん2009/01/30(金) 19:29:43ID:???
アソシエーション使うと結果変わる事ない?
たぶん親モデルと関連してるレコードしか該当しないよ
0535nobodyさん2009/01/30(金) 23:31:39ID:???
コントローラからコントローラへデータを渡すのって、どうするの?
0536nobodyさん2009/01/31(土) 01:44:15ID:ZNZRtHpp
flash
0537nobodyさん2009/01/31(土) 04:27:13ID:???
>>536
なるほど。
urlでパラメータを渡すなら、redirectでも良さそう。
でも、urlだと大きなデータは渡せないよね。
データが丸見えになるし。

あと、同じウィンドウの中でのみ渡すってなると、
どんな方法が良さそう?
0538nobodyさん2009/01/31(土) 04:30:59ID:???
>>537
まあなんだ。
ウェブアプリはデスクトップアプリと
考え方が違うが・・・
まあ、がんばれや。
0539nobodyさん2009/01/31(土) 05:48:56ID:???
Session->renew()で新しいsession_idを割り振れば
いけるかな?と思ったが、甘かった。同じブラウザでは
renewする前のが消える。
別のブラウザなら大丈夫だった。(当たり前か)
0540nobodyさん2009/01/31(土) 08:38:22ID:???
解決。セッションの使い方を間違ってる。
ユニークキーの発行が正しい。
0541nobodyさん2009/01/31(土) 09:18:36ID:???
Cakeユーザーの低レベルさが泣けてくる
0542nobodyさん2009/01/31(土) 09:28:15ID:???
>>541
今CakePHPが注目を集めている為、素人が「PHPフレームワークなら俺にも何か簡単に
Webアプリが作れるかな。」という気になっているじゃない?
見方を変えるとCakePHPの功績は大きいかも?
0543nobodyさん2009/01/31(土) 09:38:59ID:???
にしてもプログラマーと呼べないレベルの質問が多すぎる
0544nobodyさん2009/01/31(土) 09:47:48ID:???
そろそろsymfonyの時代か・・・?
0545nobodyさん2009/01/31(土) 10:44:44ID:???
それでも作れちゃうなら凄いこと
0546nobodyさん2009/01/31(土) 10:46:19ID:???
そんなレベルの人が正しくフレームワークを使いこなせてるとは思えない
保守不可能なシステムを作ってそう
0547nobodyさん2009/01/31(土) 11:16:37ID:???
Web屋と呼べないレベルではあるが
exe屋だったら最初そんなもんだろ。
まあ、フレームワーク知識自慢しかできないようじゃ、
お前らすぐに抜かれるよ。
0548nobodyさん2009/01/31(土) 13:50:46ID:???
>>529
自作クラスなんてコンポーネントにしちゃえばいいよ。
で、コントローラーで
$this->Myclass->eat('hoge');

で。

>>535
作り方としてデータを渡したいような内容のものがあるならモデルに書いた方がいい。
で、コントローラーからそのモデルのアクションを読み出してデータを取得。
0549nobodyさん2009/01/31(土) 16:13:14ID:x6QrlarV
authcompornentでユーザ登録した後、自動的にログイン状態に遷移する処理について
なにか方法があれば教えていただけませんでしょうか?
0550nobodyさん2009/01/31(土) 16:23:21ID:???
マニュアルを読め
0551nobodyさん2009/01/31(土) 17:40:26ID:???
データが全然こなくて小一時間悩んでたけどconditionsて書く所がconditonsになってた〜 時間返せー
0552nobodyさん2009/01/31(土) 17:50:06ID:???
色々読んでみたが、結局趣味でやるぶんにはイイFWってことか
0553nobodyさん2009/01/31(土) 18:44:40ID:???
>>551
あるあるwwww
JavaScriptでもundefinedとunidentifiedをよく間違えるんだよな
0554nobodyさん2009/01/31(土) 18:55:23ID:???
配列仕様だからそういうミスしても分からないんだよね
なにかあるたびに配列にミスが無いかチェックしてるわ
0555nobodyさん2009/01/31(土) 19:10:10ID:???
よく使うやつはテキストエディタの強調表示設定に入れておくのが吉
0556nobodyさん2009/01/31(土) 19:38:57ID:???
symfonyを採用したオープンソースのSNS OpenPNE3.0が1/27にリリースされたそうな。
ttp://www.openpne.jp/archives/1117/
と言う事は、OpenPNE3.0はPHP4のサーバにはインストール出来ないと言うことか?
多くのアプリがPHP4で開発されたもので、PHP5での稼働が保証されていないので、
サーバのPHPを5に出来ないんだよな。
0557nobodyさん2009/01/31(土) 21:24:40ID:???
>>548
モデルAとモデルBで、一応形としては
A hasMany B
B blongTo A
なんだけど、普段必要になるのは、Bのうちnot deleteのフラグが立ってる
1つのデータだけなのよ。そして、まれに(not delete関係なく)全ての
データが必要になる。これをどう扱ったら良い?

A hasOne B
にしても、BにA_idというフィールドが必要なだけに、こちらが望む
通りに紐付けするには条件(not delete=true)が足りない気がするし、
SQLの実行に時間や負担がかからないか心配だし、汎用性がどうか?

Bのデータをidで直接呼び出した方が早いような気がしたので・・・
Aに、not deleteに当るBのデータのidを入れるフィールドを作っていて、
AのコントローラでBのモデルも扱ってread(Bのid)ってするつもりだった。
だけど、このやり方って変?
0558nobodyさん2009/01/31(土) 21:53:45ID:???
>>557
ゆとりなの?死ぬの?

こんな風に A のモデル書いて
class A extends AppModel
{
var $hasMany = array('B' => array(
'className' => 'B',
'conditions' => array('B.delete' = 'not delete'),
),);

function hogehoge()
{
unset($this->hasMany['B']['conditions']['B.delete']);
return $this->find('all');
}
}

で、普段はコントローラから $this->A->find() でデータ取得して、
B.delete を無視する時は $this->A->hogehoge() 使うようにするだろう。jk
0559nobodyさん2009/01/31(土) 23:42:40ID:???
コントローラーから別のコントローラーに値を渡す方法と言われて、セッションとかそういう話じゃなかったことしかないな
0560nobodyさん2009/02/01(日) 01:12:20ID:???
質問です。

$data = array(
array(
'User' => array('id' => 1, 'name' => 'suzuki'),
'Tag' => array(
array('id' => 1, 'title' => 'hoge'),
array('id' => 2, 'name' => 'fuga')
),
),
array(
'User' => array('id' => 2, 'name' => 'sato'),
'Tag' => array(
array('id' => 1, 'name' => 'piyo'),
array('id' => 3, 'name' => 'moge')
)
)
);
$result = Set::extract('/Tag[id=1]/..', $data);
debug($result);

このとき$resultには、結果的に$dataと同じデータが入ると思うんですが、
「Notice (8): Undefined offset: 1 [CORE/cake/libs/set.php, line 415]」
というエラーが出て、2つめのデータが表示されません。何が原因なのでしょうか?
05615602009/02/01(日) 01:26:07ID:???
すみません、追記です。
PHPのバージョンは5.2.8、CakePHPのバージョンは1.2.1.8004です。

あと「array('id' => 1, 'name' => 'piyo'),」は、
「array('id' => 1, 'title' => 'hoge'),」とした方が自然ですね。


よろしくお願いします。
0562nobodyさん2009/02/01(日) 22:33:35ID:???
>>560
よくわからんけど。
Tagの添字のID=1が二つあるからじゃね?
それ以外の条件での検索については、エラーは出ないし。
0563nobodyさん2009/02/01(日) 22:46:30ID:???
ちょっと複雑?なアソシエーションについて教えて。
基本は A hasMany B , B belongTo A なんだけど、
AとBは hasAndBelongToMany でもある。
(Aが担当教員で、Bが生徒と思えば。
Aの中に担任が一人居るような感じ。)
belongTo のAと、hasAndBelongToManyのAsを
どうやって取得し分けたらいい?
0564nobodyさん2009/02/02(月) 01:23:57ID:???
>>563
アソシエーションのbindとunbindを使い分ければいいんじゃない?
0565nobodyさん2009/02/02(月) 05:46:05ID:lBmCzdKa
1.2でpaginatorを1画面に複数使う方法が書いてあった
blog、どこにあったか知ってるひといたら教えてプリーズ

あとで見ようとしててどっかにいってしまいました
05665632009/02/02(月) 15:51:42ID:???
>>564
一方を取得したくない時には、それでいけそうです。ありがとう。

だけど逆に、両方取得したい時に困りました。
当たり前かもしれませんが、両方が同じ変数に混ざってしまいます。

[B] => Array
(
[id] => 1
[name] => hoge
[0] => Array
(
[id] => 1
[name] => hoge
[AsB] => Array
(
[id] => 4
[A_id] => 1
[B_id] => 1
)
)
)
これ、どうやって分離する?
もしくは、別々の変数でとり出す方法は?
それとも、そもそもデータベースの設計がおかしい?
0567nobodyさん2009/02/02(月) 16:28:39ID:???
>>566
良くのみこめてないけど、tableに問題がありそうなきがする
teachers , students があるのかな?
classes があればすべて解決するような気がするけど違うのかい?
05685632009/02/02(月) 19:05:21ID:???
Authも兼ねるつもりなので、 A hasMany B のAはusersなのです。
だからgroupsも作ってあるけど、classesやgroupsのいずれでも
B blongsTo〜の関係にならないのです。
0569nobodyさん2009/02/02(月) 19:06:34ID:???
http://www.google.co.jp/trends?q=cakephp%2Cruby+on+rails&ctab=0&geo=all&geor=all&date=all&sort=0

逆転しそう
0570nobodyさん2009/02/02(月) 19:55:59ID:???
>>568
いやいやそういうこっちゃないでしょ

もっと具体的に書いてみたらどうよ。
「A hasMany B , B belongTo A なんだけど、 AとBは hasAndBelongToMany でもある」って言われてもねえ
関係するModelと、そこで使われているアソシエーションの内容を、具体的にたのむ
0571nobodyさん2009/02/02(月) 20:48:11ID:???
>>569
これってGoogleでの検索件数のトレンドグラフだよねえ。
CakePHPは色々と問題が多くて、その解決法を探す為にみんなせってと「CakePHP」
キーワードで検索をしている。だから最近検索件数がウナギ登りなんだ。
と言う見方もあるのかなあ?世間の注目を集める為のCakePHPの戦略では?
0572nobodyさん2009/02/02(月) 21:19:08ID:???
>>566
必要なデータを得られるfindをして、自前で工夫すればいいんじゃないかな
05735632009/02/02(月) 21:22:19ID:???
usersテーブル
id
name

personsテーブル
id
name
user_id //これが主たるuser

persons_usersテーブル
id
person_id
user_id //その他のuser

Userモデル
var $hasMany = array('Person' => array('className' => 'Person',
'foreignKey' => 'user_id'));

Personモデル
var $belongsTo = array('User' => array('className' => 'User',
'foreignKey' => 'user_id'));
var $hasAndBelongsToMany = array('User' => array('className' => 'User',
'joinTable' => 'persons_users',
'foreignKey' => 'person_id',
'associationForeignKey' => 'user_id',
'unique' => true));
05745632009/02/02(月) 21:23:10ID:???
Personsコントローラ
class PersonsController extends AppController {
function view($id = null) {
$this->set('person', $this->Person->read(null, $id));
debug($this->Person->read(null, $id));
}
}

すると、$person['User']に、>566みたいに、belognsToとhasAndBelongsToManyの
両方のデータが入ってしまう。
['User'][id]
['User'][name]とかは、blongsToのデータ
['User'][0][id]
['User'][0][name]とかはhasAndBelongsToManyのデータだと思う。
0575nobodyさん2009/02/02(月) 22:34:43ID:???

var $hasMany = array('Profile1' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
),
'Profile2' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
)
);
05765632009/02/02(月) 22:56:48ID:???
>>575
それだ!!うまくいきました!多謝多謝
0577nobodyさん2009/02/03(火) 09:54:32ID:???
モデル間のデータのやり取りや、
一つのモデルで複数のフィールドの
データを操作するのって、どうやるの?
というか、そういうのは奨められない?

あるフィールドにデータが書き込まれたら、
同時に別のフィールドにもデータを書き込みたい。
(DBの設計がそもそも冗長との批判は分かる。)
0578nobodyさん2009/02/03(火) 10:15:42ID:???
>>577
afterSave , afterDelete
0579nobodyさん2009/02/04(水) 16:42:15ID:???
セレクトメニューを作るために、find('list')で配列を取得して、
この配列の先頭に、例えば、
$sel[0]='ここから選んで';
みたいなのを追加するのって、どうする?

array_unshiftだと、IDに当る数字が再割り付けされてしまう。
0580nobodyさん2009/02/04(水) 17:30:08ID:???
formヘルパーのオプション指定にそういう機能が無いかと
配列に直にデータを入れてバリデーションと合わせて簡単にやれないかを検討する
0581nobodyさん2009/02/04(水) 18:18:31ID:???
ポケットリファレンスだと、そもそも
$form->input('sel_id')
の説明が無いんだよなー。
$form->selectにもなさげ。

配列に直にデータ入れて、ksortでできたからいいか。
0582nobodyさん2009/02/04(水) 18:39:48ID:???
>>581 え?
$form->select()だと第5引数showEmptyに文字列指定
調べてないけどinputもいけるはず
0583nobodyさん2009/02/04(水) 19:26:25ID:???
ほんとだ。出来た。
そうだよなー。素人の私でも、出来ないと不便だって思うもんなー。
0584nobodyさん2009/02/04(水) 23:27:52ID:???
ポケットなんとかがどんなもんだか知らないけど、まずマニュアル見ましょうよ。
せっかくCakeは日本語ドキュメントが充実してるんだから。
0585nobodyさん2009/02/05(木) 00:17:23ID:???
うむ・・・おっしゃる通り。結局、Webの日本語マニュアルが一番参考になってる。
これだけでもCakePHPを選んで良かったと思う。
だけど、紙の本で探す方が早い事も多いし、狭い画面でやってるのでwebマニュアル
を開いてる場所が無いのです。
ポケリファの1.2.1対応した改訂版が早く出て欲しい。できれば、Authとか1.2の
新機能をきっちり説明して欲しい。
0586nobodyさん2009/02/05(木) 00:26:39ID:???
1.2stable出たし、各社対応版発売を狙ってるでしょ
逆引き的なのは欲しいなぁ〜
05875822009/02/05(木) 09:29:26ID:???
>>584
まずマニュアル見ようというのは同意だけど、マニュアルの記述がまだまだ不完全なのは事実

今回の件であれば
select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)
空の選択オプションを表示したくない場合、$showEmpty を false にします。
と、ある
boolean の引数にテキストを指定するなんて、http://api.cakephp.org/ でソースを見るしかない
(今回はポケットリファレンス見たというから、つっこんだまで)
0588nobodyさん2009/02/05(木) 09:35:20ID:???
>>581
付け加えると、詰まったら http://api.cakephp.org/class/form-helper#method-FormHelperselect を見るのが、一番手っ取り早い
こっちは、マニュアルよりは更新早いし、最終的にはソースを追えるし
まあ、がんばってくれ
0589nobodyさん2009/02/05(木) 17:58:21ID:???
findAll で フィールド price か item のどちらかにマッチするというクエリを書く場合って
どうすればいいの?
0590nobodyさん2009/02/05(木) 18:28:27ID:???
>>589

1.2だったら
$this->MODELNAME->find('all',
 array(
  'conditions'=>array(
    'MODELNAME.price' => '2000',
    'MODELNAME.item' => 'ITEM')
 )
);

こんな感じ
0591nobodyさん2009/02/05(木) 18:29:43ID:???
>>590
ありがとう!
その前にMYSQLが日本語ひっかからないという。。。
なんでだろ。
参考になりました。ありがとうございます。
05925892009/02/05(木) 18:34:16ID:???
cakephp とは関係ないと思いますけど
$option = array('Faqlist.name LIKE BINARY' => $str);

ってBINARY ってのをつけると 日本語もうまくひっかかるようになります。
今まではちゃんとひっかかってたのに。MYSQLの仕様がかわったのかなー
0593nobodyさん2009/02/05(木) 18:52:42ID:???
>>590
"or"とか入れなくても良いんでしたっけ?
0594nobodyさん2009/02/05(木) 18:55:11ID:???
db側の文字コードがLatin1とかだとBinaryで処理するしかないってことだと思うけどね。
0595nobodyさん2009/02/06(金) 03:00:32ID:???
Model::save()の際に、複製を残したいと思って、
idが空になれば新規保存されるのかな?と思って、
モデルに
function beforeSave() {
unset ($this->data[$this->name]['id']);
return true;
}
と書いてみたが、UPDATEされてしまった。

かといって、
function beforeSave() {
$d = $this->data;
unset ($d[$this->name]['id']);
$this->create();
$this->set($d);
return true;
}
ってしたら、createdの日付が0になってしまった。

何か良い方法無い?
0596nobodyさん2009/02/06(金) 08:05:18ID:OIEK7Rhk
複製を残したいなら二回saveする必要があるんじゃねーか?
0597nobodyさん2009/02/06(金) 09:38:20ID:???
>>595
どのように複製したいのだろうか?
updateだろうがinsertだろうが、同じデータをinsertするということなら
afterSaveで、create後saveすれば良いと思われ
別のDBに保存したいというのならuseDbConfigを変更してsaveかな?

いずれにせよafterSaveじゃないと、validationErrorのときにもsaveされちゃうんじゃないかな
0598nobodyさん2009/02/06(金) 10:28:16ID:???
>>596,597
複製って表現が違ったかもしれん。すまん
「バックアップを残す」って感じ。
既存のデータの編集の際、既存のデータは
そのまま(削除のフラグを立てる)で、
新しいidで保存したい。

すると、afterSaveでは上書きされた後だから
ダメでしょ? そこで、beforeSaveでidを
空にすれば新しいidで保存されるかなと思ったが、
なぜか上書きされてしまった(前者)。
コピーしたデータで書き込んだら、createの
情報が抜けてしまった(後者)。という次第であります。
0599nobodyさん2009/02/06(金) 10:42:52ID:???
>>599
履歴を残すってことね。理解した。
でも、それでもafterSaveだろう
新規のデータをinsertして、afterSaveで既存のデータをupdateする感じじゃないかな
http://book.cakephp.org/ja/view/76/
beforeSaveはあくまで保存するデータをいじったりするときに使うものだと思うよ
※>>597のvalidationErrorのときにもsaveされるは間違いのようだ
0600nobodyさん2009/02/06(金) 10:53:08ID:???
>>599
>新規のデータをinsertして、afterSaveで既存のデータをupdateする
 ↑
この処理はコントローラに書くことになるよね?
どこかで、「ビジネスロジックはモデルに」なんて書いてあったので、
モデルに書く方法を考えてた。(コントローラからは普通にsaveしてる
ように見えるけど、モデルの方でバックアップを残してる、って感じ)
もしくは、モデルに上記の処理をするメソッドを作る方法もある?
Model::save()を上書きしたら・・・さすがにややこしいことになるよな。
0601nobodyさん2009/02/06(金) 11:04:42ID:???
>>600
afterSaveと言ってるくらいだから、Modelでしょーが
おまいさんのいうように、自動的に履歴が残るぞ。
まずは、マニュアル読んでコールバックメソッドを理解するべし
0602nobodyさん2009/02/06(金) 11:08:14ID:???
あ。そうか。ちょっと勉強して、試してみる。
0603nobodyさん2009/02/06(金) 11:16:38ID:???
>>602 Have a nice cooking !
0604nobodyさん2009/02/06(金) 12:54:05ID:???
>>601
「新規のデータをinsertして」もModel??
その後、afterSaveの中でgetIDできるのは
新しい方のデータで、既存のデータのidは
取得できないのでは?
0605nobodyさん2009/02/06(金) 12:58:50ID:Fuxx6e9Y
バリデーションが効かない。助けて下さい。

モデルに追加するだけで動作するよね?

var $validate = array(
'xxx' => array(
'rule' => VALID_NOT_EMPTY,
'message' => '必須項目です。'
)
0606nobodyさん2009/02/06(金) 13:12:45ID:???
>>604
それは、Controller
既存のidについては、自分で工夫してみてくれ。getIDする必要があるとは思えんから
0607nobodyさん2009/02/06(金) 13:51:55ID:???
>>606
ありがとう。わかりました。

いくつかのモデルで同様の処理が有るので、
メソッド作って、AppModelに書いてみました。
0608nobodyさん2009/02/06(金) 14:27:27ID:???
CakePHPってXSSとかSQLINJECTIONに対応してますか?
自分で処理するしかないですあk?
■ このスレッドは過去ログ倉庫に格納されています