【PHP】フレームワーク CakePHP 5ホール目【v1.2】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/12/19(金) 15:52:19ID:ylogT+7chttp://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/
0567nobodyさん
2009/02/02(月) 16:28:39ID:???良くのみこめてないけど、tableに問題がありそうなきがする
teachers , students があるのかな?
classes があればすべて解決するような気がするけど違うのかい?
0568563
2009/02/02(月) 19:05:21ID:???だからgroupsも作ってあるけど、classesやgroupsのいずれでも
B blongsTo〜の関係にならないのです。
0569nobodyさん
2009/02/02(月) 19:06:34ID:???逆転しそう
0570nobodyさん
2009/02/02(月) 19:55:59ID:???いやいやそういうこっちゃないでしょ
もっと具体的に書いてみたらどうよ。
「A hasMany B , B belongTo A なんだけど、 AとBは hasAndBelongToMany でもある」って言われてもねえ
関係するModelと、そこで使われているアソシエーションの内容を、具体的にたのむ
0571nobodyさん
2009/02/02(月) 20:48:11ID:???これってGoogleでの検索件数のトレンドグラフだよねえ。
CakePHPは色々と問題が多くて、その解決法を探す為にみんなせってと「CakePHP」
キーワードで検索をしている。だから最近検索件数がウナギ登りなんだ。
と言う見方もあるのかなあ?世間の注目を集める為のCakePHPの戦略では?
0573563
2009/02/02(月) 21:22:19ID:???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));
0574563
2009/02/02(月) 21:23:10ID:???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',
)
);
0577nobodyさん
2009/02/03(火) 09:54:32ID:???一つのモデルで複数のフィールドの
データを操作するのって、どうやるの?
というか、そういうのは奨められない?
あるフィールドにデータが書き込まれたら、
同時に別のフィールドにもデータを書き込みたい。
(DBの設計がそもそも冗長との批判は分かる。)
0579nobodyさん
2009/02/04(水) 16:42:15ID:???この配列の先頭に、例えば、
$sel[0]='ここから選んで';
みたいなのを追加するのって、どうする?
array_unshiftだと、IDに当る数字が再割り付けされてしまう。
0580nobodyさん
2009/02/04(水) 17:30:08ID:???配列に直にデータを入れてバリデーションと合わせて簡単にやれないかを検討する
0581nobodyさん
2009/02/04(水) 18:18:31ID:???$form->input('sel_id')
の説明が無いんだよなー。
$form->selectにもなさげ。
配列に直にデータ入れて、ksortでできたからいいか。
0582nobodyさん
2009/02/04(水) 18:39:48ID:???$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:???これだけでもCakePHPを選んで良かったと思う。
だけど、紙の本で探す方が早い事も多いし、狭い画面でやってるのでwebマニュアル
を開いてる場所が無いのです。
ポケリファの1.2.1対応した改訂版が早く出て欲しい。できれば、Authとか1.2の
新機能をきっちり説明して欲しい。
0586nobodyさん
2009/02/05(木) 00:26:39ID:???逆引き的なのは欲しいなぁ〜
0587582
2009/02/05(木) 09:29:26ID:???まずマニュアル見ようというのは同意だけど、マニュアルの記述がまだまだ不完全なのは事実
今回の件であれば
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:???付け加えると、詰まったら http://api.cakephp.org/class/form-helper#method-FormHelperselect を見るのが、一番手っ取り早い
こっちは、マニュアルよりは更新早いし、最終的にはソースを追えるし
まあ、がんばってくれ
0589nobodyさん
2009/02/05(木) 17:58:21ID:???どうすればいいの?
0590nobodyさん
2009/02/05(木) 18:28:27ID:???1.2だったら
$this->MODELNAME->find('all',
array(
'conditions'=>array(
'MODELNAME.price' => '2000',
'MODELNAME.item' => 'ITEM')
)
);
こんな感じ
0591nobodyさん
2009/02/05(木) 18:29:43ID:???ありがとう!
その前にMYSQLが日本語ひっかからないという。。。
なんでだろ。
参考になりました。ありがとうございます。
0592589
2009/02/05(木) 18:34:16ID:???$option = array('Faqlist.name LIKE BINARY' => $str);
ってBINARY ってのをつけると 日本語もうまくひっかかるようになります。
今まではちゃんとひっかかってたのに。MYSQLの仕様がかわったのかなー
0594nobodyさん
2009/02/05(木) 18:55:11ID:???0595nobodyさん
2009/02/06(金) 03:00:32ID:???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:OIEK7Rhk0597nobodyさん
2009/02/06(金) 09:38:20ID:???どのように複製したいのだろうか?
updateだろうがinsertだろうが、同じデータをinsertするということなら
afterSaveで、create後saveすれば良いと思われ
別のDBに保存したいというのならuseDbConfigを変更してsaveかな?
いずれにせよafterSaveじゃないと、validationErrorのときにもsaveされちゃうんじゃないかな
0598nobodyさん
2009/02/06(金) 10:28:16ID:???複製って表現が違ったかもしれん。すまん
「バックアップを残す」って感じ。
既存のデータの編集の際、既存のデータは
そのまま(削除のフラグを立てる)で、
新しいidで保存したい。
すると、afterSaveでは上書きされた後だから
ダメでしょ? そこで、beforeSaveでidを
空にすれば新しいidで保存されるかなと思ったが、
なぜか上書きされてしまった(前者)。
コピーしたデータで書き込んだら、createの
情報が抜けてしまった(後者)。という次第であります。
0599nobodyさん
2009/02/06(金) 10:42:52ID:???履歴を残すってことね。理解した。
でも、それでもafterSaveだろう
新規のデータをinsertして、afterSaveで既存のデータをupdateする感じじゃないかな
http://book.cakephp.org/ja/view/76/
beforeSaveはあくまで保存するデータをいじったりするときに使うものだと思うよ
※>>597のvalidationErrorのときにもsaveされるは間違いのようだ
0600nobodyさん
2009/02/06(金) 10:53:08ID:???>新規のデータをinsertして、afterSaveで既存のデータをupdateする
↑
この処理はコントローラに書くことになるよね?
どこかで、「ビジネスロジックはモデルに」なんて書いてあったので、
モデルに書く方法を考えてた。(コントローラからは普通にsaveしてる
ように見えるけど、モデルの方でバックアップを残してる、って感じ)
もしくは、モデルに上記の処理をするメソッドを作る方法もある?
Model::save()を上書きしたら・・・さすがにややこしいことになるよな。
0601nobodyさん
2009/02/06(金) 11:04:42ID:???afterSaveと言ってるくらいだから、Modelでしょーが
おまいさんのいうように、自動的に履歴が残るぞ。
まずは、マニュアル読んでコールバックメソッドを理解するべし
0602nobodyさん
2009/02/06(金) 11:08:14ID:???0604nobodyさん
2009/02/06(金) 12:54:05ID:???「新規のデータを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:???それは、Controller
既存のidについては、自分で工夫してみてくれ。getIDする必要があるとは思えんから
0607nobodyさん
2009/02/06(金) 13:51:55ID:???ありがとう。わかりました。
いくつかのモデルで同様の処理が有るので、
メソッド作って、AppModelに書いてみました。
0608nobodyさん
2009/02/06(金) 14:27:27ID:???自分で処理するしかないですあk?
0609nobodyさん
2009/02/06(金) 14:49:58ID:???自分で意識する必要はある。当然だが。
0611nobodyさん
2009/02/06(金) 16:17:31ID:???0612nobodyさん
2009/02/06(金) 16:32:25ID:???0613nobodyさん
2009/02/06(金) 16:44:06ID:???0614nobodyさん
2009/02/06(金) 22:15:58ID:OIEK7RhkBEGINでトランザクション開始
SELECT FOR UPDATEで更新用データ取得と同時にロック
UPDATEでデータ更新
COMMITでトランザクション終了
みたいな感じにしたいんだけど、SELECT FOR UPDATEって
どうやって設定してやったらいいんだ?
0615nobodyさん
2009/02/07(土) 09:27:29ID:u7AiZVmn表示したいのですが、
includeでコントローラが読めませんでした。
viewにすれば解決するのはわかるのですが、
外部からcakeの結果を受けとることって無理なんですかね?
0616nobodyさん
2009/02/07(土) 10:22:18ID:???(今考えている解決方法がどうやったらできるかじゃなくて)
具体的に今抱えている問題を書き込んだほうが、解決につながりやすいと思うよ
webrootにphpファイルを置くというのは、方向性が間違っている可能性が高い
0617nobodyさん
2009/02/07(土) 18:26:40ID:???条件としてはどちらもバリデーション通ったら保存。
バリデーションチェックとその表示との両立が上手くできない。
0618nobodyさん
2009/02/07(土) 18:37:09ID:???'validate' => 'first' でsaveAll()
http://book.cakephp.org/ja/view/75/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B
0619nobodyさん
2009/02/07(土) 19:28:59ID:???明確な答えをありがとう。
フォームのバリデーションエラー表示も少してこずりましたが試して見ます。
saveAllをネット上の情報で試したんですが、エラー表示がきちんと出なかったんですよね。
フォームヘルパーの指定方法の問題じゃないかと思っていましたが。
taskモデルと、アソシエーションしたTimelineモデル(hasMany)のフォームはこんな感じで書いてます。
echo $form->input('task');
echo $form->input('Timeline.progress');
ちょっと前見たときはsaveAllの説明なかった気がするのは気のせいかな・・。
履歴を見ると気のせいじゃない気もする、今月に入って誰か訳してくれたんだねありがとう訳者さん。
0620nobodyさん
2009/02/07(土) 23:38:50ID:K4fXwaLQUser自身が書いたPostのみ編集できて、他人のPostは編集できないようにしたいのですが、
どうしたらいいのかわかりません。><
isAuthorized()とかbeforeFilter()になんかちまちま書くしかないんでしょうか?
例えば、ACL使ってないけど、
function isAuthorized() {
if ($this->Auth->user('username') == 'admin') {
return true;
}
if (!empty($this->params['pass'][0])){ // ユーザー名
if ($this->Auth->user('username') != $this->params['pass'][0]) {
return false;
}
}
return true;
}
こんな感じとか?
0621nobodyさん
2009/02/07(土) 23:48:49ID:???0622nobodyさん
2009/02/08(日) 00:16:52ID:XBcxfvCP「マニュアル/開発例/ACL〜」のサンプルで
id:1のUserのみがuser_id:1のPostを編集できるようにできるんですか?
0623nobodyさん
2009/02/08(日) 01:12:57ID:???「TRPGオタしか喜ばなそうな上記説明を熟読すれば、」ってことは、
ちゃんと読んでないのか。
マニュアルくらい読めよw
それとも読めないくらい馬鹿なの?ww
もしそうだったらごめんねwww
0625nobodyさん
2009/02/08(日) 02:30:48ID:???1行に並べるのって、どうするの?
0628nobodyさん
2009/02/08(日) 11:29:47ID:XBcxfvCPこれだとテーブル単位では大丈夫だけど、レコード単位での権限の設定が
できないんじゃないかと思うんだが、違うのか?
なんか、ここはレベル低いなぁ。
0629nobodyさん
2009/02/08(日) 11:49:57ID:???自分が投稿したやつだけ編集できるって。
当たり前だろ。
管理者は全員のものを編集できるかもしれないし、
別に編集者という人を作るかもしれない。
誰が何を編集できるかを決めるのはお前。
よってお前がそういうコードを書く。OK?
レベルが低いのはお前。
0630nobodyさん
2009/02/08(日) 12:03:59ID:???tableタグ使うと$form->text()を1行に並べること出来るよ。
後は、app/webroot/css/cake.generic.cssの内容を自分の好みに編集するだな。
(でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)
0631nobodyさん
2009/02/08(日) 12:10:49ID:???> (でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)
同意。デフォルトのフォントの大きさとかマージンとか
各ブラウザの間での違いを吸収する程度にしておけばいいのに。
0632nobodyさん
2009/02/08(日) 12:17:33ID:XBcxfvCP> その処理は、自分で書くんだよ。
いや、書かなきゃならないのは、最初からわかってるよ。
でも、どこに書けばいいのかがわからない。
isAuthorized()やbeforeFilter()に書くのか?
0633nobodyさん
2009/02/08(日) 12:21:23ID:???Summary: "cake.generic.css" looks like hentai
Type: RFC
0635nobodyさん
2009/02/08(日) 13:06:23ID:???<?php
echo $form->text('hoge0', array('div' => 'false'));
echo $form->text('hoge1', array('div' => 'false'));
echo $form->text('hoge2', array('div' => 'false'));
?>
これでは縦に3つ並んでしまったが、こんな書き方ではないのかな??
0637622
2009/02/08(日) 13:32:48ID:ByGZ6/FB教えてやるから土下座して「自分の頭の程度が悪うございました」とPCの前で言え
単にACOにmodel,foreign_keyを目的のレコードのものに設定して登録して、
AROとACOの関係を定義するだけ
ACO登録位置は種類考えて適宜選べ
関係の定義とチェック関数については>>622に書かれてる
0638621
2009/02/08(日) 13:33:26ID:ByGZ6/FB0639nobodyさん
2009/02/08(日) 14:40:18ID:???0645nobodyさん
2009/02/08(日) 16:20:11ID:???0646nobodyさん
2009/02/08(日) 16:26:13ID:SHT1by4H複数のルールを設定していた場合に、
一つのエラーが検知した場合以降の
バリデーションはおこわないことは、出来ますか?
例えば、期間の入力があった場合、入力値が正しく
なかった場合、その後の妥当な期間であるかどうかの
チェックはいらないのですが。
0647nobodyさん
2009/02/08(日) 16:41:27ID:???これから始めるなら、この本お勧め。
「CakePHP徹底入門」 CakePHP1.2で説明してあるから、とても楽に入門できた。
ttp://www.amazon.co.jp/CakePHP徹底入門-イージーゲート/dp/479811717X
↓このページも入門者にお勧めかな。
ttp://kuri6005.sakura.ne.jp/cake/wiki/
0648nobodyさん
2009/02/08(日) 16:53:37ID:???http://book.cakephp.org/ja/view/133/
'last' => true
0649nobodyさん
2009/02/08(日) 17:20:04ID:???ありがとうございます。
すみません。
しっかりと説明されていますね。
もっとちゃんと読まないといけませんね。
0650nobodyさん
2009/02/08(日) 17:46:55ID:srWubjja表示はうまくできたんですけど、PC用ページのフォームで、
$form->create('post', array('action' => 'view'));
ってやったときに、$this->dataにデータが入っているときは、
action="/post/view/1"とかになるんだけど、データが入ってないと
action="/m/post/view"って/m/が先頭につけられてしまいます。
プログラム中で/m/をつけてるのはroutes.phpで
Router::connect('/m/:controller/:action/*", array('prefix' => 'mobile'));
としているとこだけなんだけど、$form->createってここを見てURLを
自動生成してるんでしょうか?
だとしたらどうやったらうまく解決できるんでしょうか?
0651nobodyさん
2009/02/08(日) 18:01:22ID:srWubjjaということは$form->createではこれをみてURLを生成してるんですね。
携帯、PCの両用サイト作ってる人はどうやって解決してるんでしょうか?
0653nobodyさん
2009/02/08(日) 21:59:25ID:???0654nobodyさん
2009/02/08(日) 22:39:55ID:???うちもそれ試した。3行になっちゃった。
やっぱ、>626の言う通り、自分で
フォームを書かないといけないのか・・・マンドクセ
生年月日を入力させるのに、セレクトメニューでは
不便なので、直接「年」「月」「日」の数字を
入力させたいのね。
何か、簡単な方法ある?
できれば、年号(MTSH)が付いてると西暦に直して
欲しいんだけど・・・(そこまで求めるのは無理か。)
0655nobodyさん
2009/02/08(日) 22:49:40ID:???0656nobodyさん
2009/02/08(日) 23:14:43ID:???'div' => false にして、出てくるフォームが改行されるのは、FormHelperの問題と違う。
CSSでそう指定してあるから改行される。
input {
clear: both;
}
みたいな感じで。
いっぺん、読み込んでるCSSファイルを移動するなりして、読み込めないようにしてみろ。
0657nobodyさん
2009/02/09(月) 00:07:57ID:???CakePHP1.2の変態cssをとっぱらったら、'div' => 'false'を付けなくてもtextBoxが1行に
ちゃんと3つ並ぶ。質問者はCakePHP1.2の変態cssを突破してtextBoxを1行に並べる方法を
質問しているのだと思う。
<?php
echo $form->text('hoge0');
echo $form->text('hoge1');
echo $form->text('hoge2');
?>
<br>
<br>
<?php
echo $form->text('hoge0', array('div' => 'false'));
echo $form->text('hoge1', array('div' => 'false'));
echo $form->text('hoge2', array('div' => 'false'));
?>
>>654
自分でフォームを直接書いたとしても、CakePHP1.2の変態cssの壁に阻まれると思う。
敵はCakePHP1.2の変態cssだと思う。変態cssを攻略するのが近道。
tableタグを使うと変態cssの中でもtextBoxを1行で表示できる。が詳細なレイアウトを
調整しようとすると変態cssと戦わざるを得ない。
<table>
<tr>
<td><?php echo $form->text('hoge0'); ?></td>
<td><?php echo $form->text('hoge1'); ?></td>
<td><?php echo $form->text('hoge2'); ?></td>
</tr>
</table>
0658nobodyさん
2009/02/09(月) 00:13:00ID:???無駄な労力使ってるんだw
0660nobodyさん
2009/02/09(月) 01:19:15ID:???0663nobodyさん
2009/02/09(月) 20:24:53ID:???0665nobodyさん
2009/02/09(月) 20:53:38ID:???0666nobodyさん
2009/02/09(月) 20:59:41ID:???■ このスレッドは過去ログ倉庫に格納されています