【PHP】フレームワーク CakePHP 5ホール目【v1.2】at PHP
【PHP】フレームワーク CakePHP 5ホール目【v1.2】 - 暇つぶし2ch347:nobodyさん
09/01/12 17:20:07
報告したところで今やってる案件には意味ないし
次は絶対に使わないから
Cakeの開発スピードからして見つけたバグ全部修正されるのに半年はかかりそうw

348:nobodyさん
09/01/12 17:20:48
間違えてCakeなんかを使ってしまう人を増やさないようにしないとな

349:nobodyさん
09/01/12 17:21:25
>>347

きみは別人だろw

きみもいやになったのか?

350:nobodyさん
09/01/12 17:21:58
1.2が公式にリリースされて危機感を持っている奴がいるらしいな
どのフレームワークの信者だ

351:nobodyさん
09/01/12 17:23:00
>>347

次なに使うの?

352:nobodyさん
09/01/12 17:23:19
>>349
別人?なにを言ってるんだ
おまえは誰か特定の相手に話しかけてるのか?こんな場所で?

俺は今回の話題ではCakeはバグ大杉使えないFW派だよ

353:nobodyさん
09/01/12 17:23:30
まぁこれからCake使うやつに助言

規約からはずれたことはするな
でも、それじゃあ大した物は作れない

組み込みのライブラリは使うな
全部自分で一から書け

FW使う意味ねーw
まぁぱっとみ使いやすいとは思うんだけどね
ここまでバグ多いとな…

354:nobodyさん
09/01/12 17:23:49
>>351
SAStrutsかDjango

355:nobodyさん
09/01/12 17:25:25
ちなみにCakeはオブジェクト指向じゃないって話あったけど
問題なのはAPIじゃなくてコアのコード内部なんだよね
ハックするのも一苦労

あのスパゲッティな有様じゃCakeの将来は危ういよ

356:nobodyさん
09/01/12 17:26:23
というかPHPのFWはまともなのがないな

Yiiとかってどうよ

357:nobodyさん
09/01/12 17:54:39
>>354
レンタルサーバで動かす気ない人か

358:nobodyさん
09/01/12 17:55:17
PHPでオブジェクト指向ってもっさりフレームワークの登竜門だろw

359:nobodyさん
09/01/12 17:58:23
Cakeは既にあらゆるフレームワークの中で最も重い部類

360:nobodyさん
09/01/12 18:05:28
で、なんかいいのないのか?

兄弟とか言われてるCIは、命名規則に統一性が乏しいし

361:nobodyさん
09/01/12 18:06:17
>>359

362:nobodyさん
09/01/12 19:32:11
でも、世界でsymfony、zend+frameworkを抜き、最も注目されているPHP FWという事実は
どう理解すればいいの?
URLリンク(www.google.com)

363:nobodyさん
09/01/12 19:35:28
PHPのユーザ層が重視するのは簡単に導入できる事と
HOWTO情報の多さだからでしょ
使ってる人たちはCakeしか使ったことないんじゃないの

364:nobodyさん
09/01/12 19:40:29
PHPったって殆どの人は楽天やGREEを作る訳じゃないんだから
重さって気にする意味無いよね
重さで言えばRoRとか死ぬほど重いんだし

365:nobodyさん
09/01/12 19:43:30
重いのは誰も問題にしてないけどね

366:nobodyさん
09/01/12 20:59:16
すみません>>298なんですが
$form->input('honbun', array('type'=>'textarea', 'cols'=>'10', 'rows'=>'5'));
で横幅のせまいtextareaを表示したいのですが、何かヒントありませんか?

367:nobodyさん
09/01/12 21:10:40
ところで、セッションってモデルだと思うんだが、
なんで、モデルで使えないのかね

368:nobodyさん
09/01/12 21:13:12
セッションはモデルじゃねーよw

369:nobodyさん
09/01/12 22:33:10
>>366
cake.generic.css
input, textarea {
width: 100%; ←これ?
}

370:nobodyさん
09/01/12 22:57:16
>>369
app/webroot/css/cake.generic.css
input, textarea {
  /* width: 100%; */
}
width: 100%をコメントにすることで
$form->input('honbun', array('type'=>'textarea', 'cols'=>'80', 'rows'=>'5'));
textareaの横幅(cols)設定が有効になるようになりました。ありがとうございました。
合わせて、
$form->input('meado', array('type'=>'text', 'size'=>'50'));
のsize設定も有効になり二重の喜びです。ありがとうございました。

371:nobodyさん
09/01/12 23:07:20
>>368

そうか?
データのやりとりするんだから、モデルだと思うけど?
まあ場合にもよるだろうけど

372:nobodyさん
09/01/12 23:11:10
セッションはモデルじゃないよ
データを永続化するのがモデルであって
セッションってのはデータでhiddenで引き回してるのと同じようなことだから

373:nobodyさん
09/01/12 23:33:55
なんでこんな使いにくくてバギーなcakephpが人気あるんかね?
たしかに、とっつきやすさはsymfonyやzendよりも上だと思うが
それだけなんだよね。
PHP使ってるやつはプログラム自体初心者が多いんだろね。
チュートリアル作って終わりなやつが多いんじゃね?

374:nobodyさん
09/01/12 23:39:43
玄人の言語で作れば?

375:nobodyさん
09/01/12 23:44:35
確かにPHPを使う意味なんてないんだよね
フレームワークを使うほどの開発になった時点で

376:nobodyさん
09/01/12 23:50:55
殆どのものはレンタルサーバで動かすんだからPHPかPerlじゃないと動かんわね
専用サーバならJavaにした方が楽だし

377:nobodyさん
09/01/12 23:52:44
>>375
いいこというね~
PHPが最高に輝く使い方だね。

378:nobodyさん
09/01/12 23:56:14
好きな言語すら入れられない環境の方がかなりマイナーだと思うよ
個人だろうと企業だろうと普通はその程度の自由度はある環境でやってるよ

379:nobodyさん
09/01/13 00:36:35
企業で大規模にやるような開発でCakeやRoRみたいなのは使わないと思うよ
レンタルサーバで動かすCMSとかDBのCRUDがメインのシステムならぴったりだけどさ

380:nobodyさん
09/01/13 11:22:28
セキュリティ面のバグの多さからWWWに出す時点でCakeは良くない

381:nobodyさん
09/01/13 11:48:16
>>379
TwitterやCookPad、楽天でもRoRを使ってるのすら知らんのか。

そういえばここCakePHPスレだったなw

382:nobodyさん
09/01/13 13:31:48
>>379
> DBのCRUDがメインのシステム

ほとんどの会社で必要とされるシステムって、それだぞ?w

383:nobodyさん
09/01/13 15:39:41
RoRを覚えるのが面倒というのもあるな
Ruby動かせないときもあるしなあ

384:nobodyさん
09/01/13 21:53:50
>>382
実際作ってみると業務システムのパターンは極めて限られていることがわかるよね。

385:nobodyさん
09/01/13 22:27:13
そうでもないけどな
データ登録以上にワークフローと帳票が多い

386:nobodyさん
09/01/13 22:33:33
ワークフローと帳票といっても
結局はCRUDだしなぁ。

387:nobodyさん
09/01/13 22:58:25
可哀想な人が来たな

388:nobodyさん
09/01/13 23:03:28
>>387
その人、いらっしゃ~いw

389:nobodyさん
09/01/13 23:58:47
パターンは極めて限られていると見積もったCRUDシステムを
作るたびに炎上させる優秀な技術者様達

390:nobodyさん
09/01/14 13:24:41
1つのテーブルにいろいろな画面(コントローラ)からアクセスする場合、
モデルは、テーブルと対になるようにして1つのモデルにするのがよいか、
それともコントローラと対にするか、どちらが一般的でしょうか?

例えば受注テーブルがあり、
あるコントローラでは受注数を表示するのがメインの処理で、
また別のコントローラでは受注金額を表示するのがメインの処理、
のような場合、受注テーブルのモデルを1つ作成するのか、それとも
コントローラ毎に作るのか…。

391:nobodyさん
09/01/14 13:42:37
おまえはMVCの基本についてすべて一つ一つt質問するつもりか

392:nobodyさん
09/01/14 13:44:19
>>390
無論、モデルはひとつ。

393:nobodyさん
09/01/14 13:45:45
>>390
コントローラーってのは要するに人がプログラムにアクセスする時のURLなわけよ。
だから人から見てわかりやすけりゃ良いわけで、モデルと対になってる必要なんて無い。
ってのが俺の考え。
逆に同じテーブルにモデルがいくつもあったらプログラム作る時に混乱するんじゃない?
それぞれ特殊なfindメソッドでも作ってるんなら別だけど。

394:nobodyさん
09/01/14 14:52:22
サブホストや接続IPによってDB接続先を変える方法知ってる?

395:nobodyさん
09/01/14 14:53:24
やっぱりモデルは1つにまとめるべきなんですね。

今回質問したのは、>>393
「それぞれ特殊なfindメソッドでも作ってるんなら別だけど。 」
がまさしくそれで、取得対象のテーブルは1つなんですけど、
そのデータの取得方法や見せ方が全然違って、ただ当然コントローラは
個別に存在するので、
1つのテーブルを元にその見せ方毎にモデルを作りモデルの中で、
var $name = 'table'; としておきつつ、
それぞれの取得するためのメソッドを作成していこうかな、と思い作りはじ
めた矢先、取得テーブルは1つなので、そのモデルに全部メソッドをまとめた
ほうがいいのか?と迷いはじめてしまい…。

テーブル単位にメソッドをまとめるのか、機能毎にモデルを分割するのか…。

まだまだ精進がたりませんね、大変すみませんでした。

396:nobodyさん
09/01/14 15:08:08
>>394
URLリンク(d.hatena.ne.jp)

397:nobodyさん
09/01/14 15:11:54
>>395
findメソッドは、カンタンにオーバーライドできる

テンプレの↓参照
CakePHPを使ったMVC設計のベストプラクティス - Sooey
URLリンク(www.sooey.com)


398:nobodyさん
09/01/14 15:49:49
>>395
>テーブル単位にメソッドをまとめるのか、機能毎にモデルを分割するのか

一律的な分け方をすると後で縛りがきつくなるから
機能目的によってバランスよく分別した方がよい



399:nobodyさん
09/01/14 15:51:45
むしろ厳密に言えば両方違う
2モデルを1つのテーブルに格納することが可能だから

400:nobodyさん
09/01/14 15:59:26
テーブルやモデルの対に関して議論することがアホらしいw
後退的議論で無意味


401:nobodyさん
09/01/14 16:02:02
どんなケースも可能だから
何を作るか?どんな機能を作るかを前提してから
モデルとテーブルの対の議論をしないと
抜け穴からのもぐら叩き合戦になるよ

402:nobodyさん
09/01/14 20:32:29
1.1と1.2って大分違いますか?
ガイドブック買ってやってみたけど早々に躓いて
しまいました。

403:nobodyさん
09/01/14 21:28:26
1.1と1.2は大分違うと思う。
ガイドブックで1.2で始めるのは初心者にはつらいと思う。
「CakePHP徹底入門」は1.2で書いてあるから1.2入門者にお勧め。
ガイドブックも良著だから、1.2の入門が終わってから読み直す
ことを勧めるなあ。

404:nobodyさん
09/01/15 04:27:43
「CakePHP徹底入門」のamazonのレビューがよくないというか一人しか書いていない
それも星一つ。自分は少し立ち読みしただけだから何とも言えないが・・
ガイドブックは評価が高いけど


405:nobodyさん
09/01/15 12:14:25
ぶっちゃけ、公式Webの情報で十分なのがPHP界隈の良いところだとおもうんだが。

406:nobodyさん
09/01/15 18:02:47
>>389
> パターンは極めて限られていると見積もったCRUDシステムを
> 作るたびに炎上させる優秀な技術者様達

なんで炎上させないといけないんだよw
お前の会社か?それ。

407:nobodyさん
09/01/15 19:16:12
viewのキャッシュする直前にキャッシュする対象をいじりたいんだけど
なんかいい方法あるのかな

408:nobodyさん
09/01/15 23:13:14
SQLiteとMySQLを同時に使うのって可能?

409:nobodyさん
09/01/15 23:16:50
可能。

410:nobodyさん
09/01/16 00:17:54
なにそれ、どうやんだ?

411:nobodyさん
09/01/16 00:21:09
DATABASE_CONFIGに複数設定して切り替えるだけだろ

412:nobodyさん
09/01/16 01:45:44
そりゃだるいな

413:nobodyさん
09/01/16 16:24:26
>>412
モデルに使用する、データベースを指定する以外で、
だるく無い方法があるのか?

414:nobodyさん
09/01/16 17:30:29
>>413
アホはほっとけ

415:nobodyさん
09/01/16 18:16:16
Model::$validateで値そのものを利用して'message'を動的に設定ってできますか?
'この番号は使用できません'って出力してdata[]にそのまま残すのも間抜けなので、
data[]を使用した'message'を設定してdata[]消したいんですけどよく分かりません

通常ルールでのチェックも行っているので、View側でエラーメッセージチェックしてから
特定のエラーメッセージのときだけdata[]からメッセージ作成して
input value= にセットされないように処理するって何か変な気がしたので

416:nobodyさん
09/01/16 18:30:22
メソッド内でうまいことエラーメッセージを書き換えられればいいんだろうけど

説明下手なきがするのでやりたいこと
入力フォーム→結果の表示フォームとエラー
[ab]→[ab]数字で入力しやがれ
[25]→[25]25は使えねえぜ

417:nobodyさん
09/01/16 21:29:52
emailコンポーネントって文字化けするよね
しかも普通にPHP標準のメール送信機能使うと化けないケースで化けたりするから困る
また組み込みライブラリの糞ソースを修正する作業が始まるのか・・・

418:nobodyさん
09/01/16 21:37:31
emailコンポーネントを継承して
問題ないようにしているけど?

オブジェクト指向になっているおかげで
いくつかのメソッドをオーバーライドするだけですんだ。

419:nobodyさん
09/01/16 21:40:49
文字化けしないよ別に
ファイルの文字コードとか問題ないの?

420:nobodyさん
09/01/16 22:28:03
toに全角使うと化ける
本文も特定のパターンで化ける

421:nobodyさん
09/01/16 22:36:11
toはエンコしなきゃ化けるだろそりゃ

422:nobodyさん
09/01/16 22:38:28
だからそれをコンポーネント内部でなんでやってないの?って話だよ

423:nobodyさん
09/01/16 22:39:12
toってset()じゃなくてプロパティに直接設定するようになってるけど
どうやってエンコはさめばいいの?
本体のコード見て解析してエンコードはさむくらいしか思いつかないんだけど。

424:nobodyさん
09/01/16 22:42:13
最後に送信するときにでもやればいい。

425:nobodyさん
09/01/16 22:47:48
>>422
世の中には日本語以外もあるわけでな
必要なら日本人が修正してコミットすべき部分だろうに

426:nobodyさん
09/01/16 22:49:09
そんなに不満だらけなら他のFW使えばいいじゃん
メールのエンコードも完璧なFWをさ

427:nobodyさん
09/01/17 10:19:42
1.2.1

428:nobodyさん
09/01/17 11:36:23
お、今度はstableを謳ってる
# If you are using AuthComponent without SecurityComponent you should update to CakePHP 1.2.1.8004 asap (gwoo)
だってさ

429:nobodyさん
09/01/17 11:38:12
1.2 CheatSheet キタ━━(゚∀゚)━━!!!!
URLリンク(cakephp.org)

430:nobodyさん
09/01/17 13:58:26
>>428
なにがかわったんだ?

431:nobodyさん
09/01/17 14:40:37
>>429
これはいいね。早速プリントした。
あと、毎回html->linkの何番目をfalseだっけ?ってマニュアル見なきゃならん俺のために
付属のヘルパー分もお願いしたい。

432:nobodyさん
09/01/18 11:31:02
>>430
URLリンク(groups.google.com)

Essentially, an attacker may be able to obtain credentials as the first user of the system.
If you are interested in testing your site, you can use the SQL Inject Me plugin
for Firefox

433:nobodyさん
09/01/19 16:13:21
会員登録時とかで、パスワードが勝手にハッシュ化されるけど
確認画面いって入力画面に戻るとハッシュ化されたものがパスワードのとこに入る
そしてまた確認画面に行くと再度ハッシュ化される
登録されるのは2度ハッシュ化されたデータ
当然認証は通らない

これはどうすれば?

434:nobodyさん
09/01/19 16:21:13
パスワード消す

435:nobodyさん
09/01/19 16:23:37
詳しく

436:nobodyさん
09/01/19 17:12:40
入力画面に戻るときに消していいんなら
formへるぱーで'value'=>false指定すればよろし

437:nobodyさん
09/01/19 17:15:56
再入力させるのはなぁ
既にハッシュ化してるんだからそのまま入れてもセキュリティ上問題無いのに
ハッシュ化されていれば再ハッシュ化は行わないようになってくれてたら良かった

フォームのパスワードの初期値と送信されたデータが同じだったらハッシュ化はしない
とするだけで出来たはずなのにな

438:nobodyさん
09/01/19 17:38:24
ちょっとコード読んでみたけど
ハッシュ化のタイミングでセッションは既に今送信されたデータに書き換えられてて
元あったものとの比較が出来なくなってる

これ以上手間が要るならめんどくさいなー

439:nobodyさん
09/01/19 17:45:57
確認用の入力分を使えばいいんじゃねえの?

440:nobodyさん
09/01/19 18:11:18
確認入力のバリデーションと競合して分け分かんなくなってきた
どういう仕様になってるんだろ

passwordフィールドはハッシュ化されるが
password_confirmはハッシュ化されない
おかげで確認画面にいってから戻るとパスワードが違うと言うエラーが出る問題も絡んでくる


441:nobodyさん
09/01/19 18:17:05
やはり確認用の入力を使うと言う手段が本筋じゃないな
passwordもpassword_confirmも同様にハッシュ化して
フォームの初期値から変更がなければハッシュ化は行わない、
と言う設計にすべきだと思う

でもこれをやるには今のAuthコンポーネントの仕様からじゃだいぶ手間がかかる

442:nobodyさん
09/01/19 18:26:26
つーかもう
Authの自動ハッシュ化を無くして
手動でハッシュ化するのが一番楽だわ

443:nobodyさん
09/01/19 19:02:35
cakeは謙虚な心がないと使いこなせない

444:nobodyさん
09/01/19 19:20:43
ハッシュ化なんてユーザパスワードくらいでしかやってないし
自動ハッシュ化止めてセーブ時とログイン時にハッシュ化するようにしたらできたくせえ!

445:nobodyさん
09/01/19 22:36:21
form部分は
name="raw_password"
name="raw_password_confirm"
にしといて、
validateでは、
raw_passwordとraw_password_confirmを比較
saveの前にpassword = raw_passwordしとくのは?

446:nobodyさん
09/01/19 22:42:10
それもいいかもね
コンポーネントに手入れ無くて良いし
でもAuthで暗黙的にハッシュ化されるわりにそれを意識したコーディングになってるから
違和感はあるけどね
それなら明示的に書く方が、とおもう

447:nobodyさん
09/01/20 00:34:26
Validationで戻ったときはパスワードは再入力させる方が一般的だと思うけどね。

448:nobodyさん
09/01/20 00:36:53
あぁ、そういう話か。
普通再入力の際にはパスワードは消えてるでしょ

449:nobodyさん
09/01/20 02:09:06
エレメントを呼び出すんじゃなくて
ビューからアクションを呼び出す事って出来ないのかな?

450:nobodyさん
09/01/20 02:15:23
事故解決

451:nobodyさん
09/01/20 02:47:07 W42hdWVL

iis,oracle,php5インストール後、
cakePHP入れて、ブログのチュートリアルやってんだけど、
ビュー作って確認するところのテーブル一覧表示で日本語データが表示されません。
半角英数ですと表示されます。数値、日時も問題なく表示されています。
db内には、正しい全角データが入っているのですが、
なぜでしょう?



452:nobodyさん
09/01/20 02:49:30
>>451
ソースの文字コードとMySQLの文字コード確認

453:nobodyさん
09/01/20 02:50:47 W42hdWVL

両方、utf8です。

454:nobodyさん
09/01/20 03:21:49
そもそもoracleか・・

455:nobodyさん
09/01/20 11:56:56
>>452
oracleだと書いてあるだろボケ
なにがMySQLの文字コードだよ


456:nobodyさん
09/01/20 13:54:45
>>451
phpのinternal_encodingとかその辺の設定確認
あとcakeを介さず直接接続→出力が文字化けするか否か確認


457:nobodyさん
09/01/20 15:52:01
>>455
www

458:nobodyさん
09/01/20 16:57:25
あれ、一人だけID出てるな

459:nobodyさん
09/01/20 17:03:38 b4+xy3zg
sage無きゃ出るでしょ

460:nobodyさん
09/01/20 17:07:06
なるほどそういうことか

461:nobodyさん
09/01/20 17:13:23
sage無くても出ないけどね

462:nobodyさん
09/01/20 17:41:48
1.2なってからのfindやinputの修正は地味だけど良いね
非常に分かりやすくなった

463:nobodyさん
09/01/21 01:59:22
scaffoldだとAuthコンポーネントってちゃんと働かない?
webルートにアクセスすると、一応/users/loginへ
リダイレクトされるんだけど、そこでurlを/users/indexって
書き替えると、ログインしてなくてもユーザーの一覧が
見えてしまう。(´・ω・`)


464:nobodyさん
09/01/21 05:54:40
Controllerになんか書くんじゃなかったっけ。

465:nobodyさん
09/01/21 10:09:05
>>464
Controllerには許可する方を書くわけだから不要だと思う
>>463
ほかのControllerでも同じ症状なら、scaffoldが原因だろうけど、、、

466:nobodyさん
09/01/21 10:42:49
空のindexを書くと、indexにはAuthが効く。
やっぱ、scaffoldが原因かなぁ。
ちゃんと全部自分で書かないとダメか。


467:nobodyさん
09/01/21 10:48:54
action内でscaffoldのフローに飛ばせないのが、辛いよね
この問題にぶちあたって、結局1から書くことになる
すべてのactionを

468:nobodyさん
09/01/21 10:55:35
試してないけどさ
beforeFilter()でaction名を見て、適宜login()に飛ばしてみたら?

469:nobodyさん
09/01/21 11:01:21
if (in_array($this->action ,a('index' ,'etc')) && !$this->Auth->user()) {
// リダイレクト
}

470:nobodyさん
09/01/21 11:34:17
認証掛けるくらいなんだから、うかつに編集されないように
scaffoldを使わないのが正しいやり方だと思う。思うけどね。

471:451
09/01/21 16:59:21
事後報告です。
>>456
> >>451
> phpのinternal_encodingとかその辺の設定確認

この辺りの設定も甘い所がありましたが、utf8で調整するも変わりませんでした。
で切り分けるためにも下を行ったのですが・・・。

> あとcakeを介さず直接接続→出力が文字化けするか否か確認

直接データもらうと、sjisで出力されてきて意味がわからず悩みました。
知っている人はなんでもないんでしょうけど。

で、結構な時間を費やしDBからデータ出力の時点があやしいとなり、
いろいろググってたら判明!
CAKEインストの時のDB設定で文字コード設定があることがわかり、
(設定した時は、どこぞのブログの設定をコピペしてきたんで文字コードを
設定している意識がなかったorz)確認するとsjisになってた、でこれをutf8へ
指定して、cakeの問題無くDBデータが表示されることが確認出来た。

で、ここで疑問が直接もらうとなぜSJISでもらうのか、
恐らくcakeでsjisからutf8へ文字コード変換してることになるんだと思うけど、

結局、oracleが出力文字コードを変えるようで、OSの環境変数を設定して、
NLS_LANG=JAPANESE_JAPAN.AL32UTF8
問題無く直でもutf8で出力されることを確認。

ふー時間くったー。
途中oracleの調子が悪くなって、再インストに見舞われるし。
チュートリアルを進めよう~。

472:nobodyさん
09/01/21 17:57:23
>471
へぇ~、いまはOracleでもまともに動くんだなぁ。

2年位前はDBO周りがバグだらけで使い物にならなかったけど。


473:nobodyさん
09/01/21 20:17:56
投稿された記事の編集権限みたいなものもACLで管理する?
機能制限みたいなものはACLでやるんだけど
同じ機能でもオブジェクトのidによって変わる、みたいなのもACLでやるべきなのかな?

474:nobodyさん
09/01/22 01:10:40
containでモデル指定すると親モデルと同じ階層に並ぶ形で出てくるけど
親モデルの奥に配置するにはどうすればいい?
Model1->find('all',array(
'contain'=>array(
'Model2'
)),

結果:
array(
[0]=>array(
[Model1]=>array(),
[Model2]=>array(),
)
)

475:nobodyさん
09/01/22 10:29:14
decorte.phpのCakePHP1.2.1対応版はまだかな~

476:nobodyさん
09/01/22 12:48:42
cakeのDB接続まわりを参考にしたいのですけど
どのあたりのソースを見ればよいのでしょうか?
/app/config/database.php.default
に接続情報がありますが
これらの情報を使用して接続している部分あたりを見たいです

477:nobodyさん
09/01/22 12:53:15
>>476
cake/libs/model/datasources
cake/libs/model/datasources/dbo
あたりかな


478:nobodyさん
09/01/22 12:54:16
/cake/libs/model
接続に言ってる所と言うのならその下のdatasources/dboの下

479:nobodyさん
09/01/22 15:44:55
CakePHP には、Railsでいうmigrationがないけど、
みんなはDBスキーマはどうやって管理してる?

前スレを見たら少し話題になってたけど、なんかgdgdに終わってた。

480:nobodyさん
09/01/23 00:16:41
CakePHPの1.2.0.7962でセキュリティコンポーネントを使って
二重投稿防止しようとしてるんだけど全然防止できない
saveした後に明示的にセッションからトークン消してやればうまくいくんだけど、
皆様方そんなことをしている様子はないし

URLリンク(www.1x1.jp)

やってることはほぼこのまんま
1.2なんで$formでフォーム生成してるのが違うくらい

フレームワーク使ってるってのに全然サクサク感がねぇー

481:nobodyさん
09/01/23 02:23:23
>>479
とりあえず、普通にSQLでやってる。
create_tables.sqlとか適当なファイルにcreate table文まとめてる。
で、Subversionで管理。

ほんとは、マイグレーションあると便利だけどね。
こんな感じの使い方ができるPHPスクリプトを作ればいいんだけど、
面倒だからやってない。でも、そのうちやるつもりw
php rake.php db:migrate
php rake.php db:migrate VERSION=3
php rake.php db:create
php rake.php db:drop


482:481
09/01/23 02:38:24
今調べてみたら、1.2だと非公式だけどマイグレーションあるんだね。
知らなかったわ。
今度試してみよう。

483:nobodyさん
09/01/23 04:06:53
>>473
マニュアルのauthコンポーネントとACLのページを少ないから読んで見るといいかも
単純なログイン後とログインして無いとかならauthでいける

484:nobodyさん
09/01/23 07:29:32 YSArohX3
cakeのfindで、一番大きなidのデータを取得したり、
一番新しいcreatedのデータを取得したりとかって、簡単にできますか?
やり方があれば、教えてください。

485:484
09/01/23 07:37:43
sortして1番めを取得すれば良かったのか…
>>484自己解決で。素人ですみません。

486:nobodyさん
09/01/23 10:46:31
>>481-482
自分もこういうのを見つけていた。まあ「cakephp migration」でググっただけ
だけど。

"CakePHP migration" フォーラム - CakePHP Users in Japan
URLリンク(cakephp.jp)

CakePHP のおいしい食べ方: DBマイグレーションか、DBスキーマシステムか
URLリンク(cakephp.seesaa.net)

誰か使っている人いないかな。

487:nobodyさん
09/01/23 17:31:45
>>484
sql の max 関数 調べてみい

488:nobodyさん
09/01/24 16:41:32
AuthComponent の認証をディレクトリ単位でわけるよい方法ってないでしょうか?

/document_root/siteA/ 配下と
/document_root/siteB/ 配下でわけたい。

siteA 配下は 教師モデルを対象に認証済みのユーザーはアクセス可能とし、
siteB 配下は 生徒モデルを対象認証済みのユーザーを対象にする。
当然、教師認証済みであってもは siteB にはアクセスできず、生徒は認証済みであっても
siteA にはアクセスできない

みたいな事がやりたいんですが。。。



489:nobodyさん
09/01/24 16:51:08
acl

490:488
09/01/24 17:14:12
acl は、同一ユーザーテーブルの中での権限の割り当てではないでしょうか?
がんばって読んでみたんですが、そもそもユーザー認証を行なうモデルが異なる場合は
対応できないように思いました。

今回は、教師と生徒で登録されているテーブルが違うのでログインページも教師用と生徒用があります。

教師は siteA/login.php にて。生徒は siteB/login.php にて認証します。

で、教師でログインした場合は siteA 配下のみアクセス可能。生徒でログインした場合は siteB のみ
アクセス可能としたい。

かっこ悪いすが、サブドメインきって cake そのものを2通り用意したほうが簡単かもしれないと思ってしまいました。
何かよい方法があればいいな、と。


491:nobodyさん
09/01/24 22:19:27
もっと嫁

492:nobodyさん
09/01/24 22:20:11
cake2個用意するとか前にも言ってるやつが居たが
プログラマーのやり方じゃない


493:nobodyさん
09/01/24 22:44:47
cakeはもっとサンプルが公開されてると、こうした初心者の人も助かりそうだね。
初心者がcakeのソースなんて追え無いんだから。

494:nobodyさん
09/01/24 22:58:31
つーか公式マニュアルにAROとACOの説明があるのに
>>490の理解になるのはおかしい
ちゃんと読んでない

495:nobodyさん
09/01/25 11:58:58
アクションが増えるとコントローラーの行数も増えるのたが、
お前らのコントローラーの行数は最大でどの位ですか。

496:nobodyさん
09/01/25 12:03:41
アクションの数自体、1コントローラ最大で10くらいしか経験無いわ

497:nobodyさん
09/01/25 19:50:45
「CakePHPポケットリファレンス」の資料に載ってる
CakePHPの命名規則って、かなりでたらめ?

498:nobodyさん
09/01/25 21:22:02
一つの関数(アクション)の行数を短くしろとは聞くが
一つのクラス(コントローラー)の行数を短くしろとは
あまり聞かない。

499:nobodyさん
09/01/25 23:34:20
>>497
「CakePHPポケットリファレンス」の命名規約(p.406-408)で
「これ、おかしんじゃない」のワースト3を教えて。
URLリンク(book.cakephp.org)の規約

500:nobodyさん
09/01/25 23:37:01
俺も手元の開いてみた
なんか楽しいw

501:nobodyさん
09/01/26 00:04:38
えーっと、どれも酷いので順番は付けられないけど
コントローラーの命名規則
英単語の単数形+"Controller" って書いてるのに、例が PowerUsersController
モデル名+"_id"って書いてるのに、例がpower_users_id
あとある?


502:nobodyさん
09/01/26 01:11:31
ホントだ。あるねえ。
コントローラの命名規約
○クラス名 英単語の複数形+"Controller"  PowerUsersController
テーブルとカラムの命名規約
○外部キー モデル名+"_id" power_user_id、article_id
(モデル名は単数形だよね。)
修正しました。

503:nobodyさん
09/01/26 10:35:54
編集フォームの初期値をセットするには
$form->create('User');
で作っていたとしたらどういう変数名・配列構造でセットすればいいの?


504:nobodyさん
09/01/26 10:52:09
>>503
$this->data['User']['name'] = '麻生太郎';

505:nobodyさん
09/01/26 12:24:49 j8WtT0GU
1.2系のAuthComponentにおいて任意のidでユーザ認証されてしまう、という脆弱性が。
1.2.1.8004へアップデート推奨らしいぞ。

URLリンク(cakephp.jp)
URLリンク(www.pseudocoder.com)

506:nobodyさん
09/01/26 13:21:32
AuthComponentをStableから使い始めた俺は勝ち組w

507:nobodyさん
09/01/26 13:41:36
>>505
ワロタw

どこがAuthなんだよ

508:nobodyさん
09/01/26 16:40:15 j8WtT0GU
これってやばいんだよね?

509:nobodyさん
09/01/26 20:39:14
testsuiteって使ってる?
マニュアル見ても、よく分からん。

510:nobodyさん
09/01/26 22:55:14
>>508
機能として破綻してるw

511:nobodyさん
09/01/26 23:57:03
ああー
よくわからんままやったら、
フィールド消えたわ
まじか、これ

512:nobodyさん
09/01/27 10:11:27
バグが取れるまでstableにしませんとか誇らしげに語ってなかったっけ?w

513:nobodyさん
09/01/27 11:51:11
>511はtestsuiteの話しな

testsuiteの解説がガイドブックとかに無いし、
web上にもあんまり情報が無いので、よくわからん。
でも。simpletestをインスコしたら、bakeの際に
いろいろ聞かれなくなったのは楽だな。

514:nobodyさん
09/01/27 12:20:04
1.2.1.8004 Stable ですが

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

URLリンク(example.jp) ってやると、URLリンク(example.jp) に勝手になってしまって

Error: EstsController could not be found.

となります。 t に限らず webrootが1文字で とコントローラの最初の一文字が同じだと
上記のようになると思いますが、何か注意するところはありますか?

515:nobodyさん
09/01/27 12:32:20
>>514
URLリンク(cakephp.jp)
これと同じかな

516:nobodyさん
09/01/28 11:36:58 AHb2WVE2
既存テーブル名が日本語で、cakeが認識しません。
どうすればいいのでしょうか?
php直ですと日本語テーブル名でクエリは通ります。


517:nobodyさん
09/01/28 12:33:02
cake周りの文字コードをutf-8にしたら
とりあえず、認識した。

518:nobodyさん
09/01/28 18:06:35
テーブル名が日本語ってトラブルの元じゃない? って、以前言われた。

testって、データを入れて出して一致してるか確認してるんだって事が
ようやく少し分かった。

519:nobodyさん
09/01/28 18:29:34
テーブルとかカラムが全角文字だと激怒する奴いるけど
別に日本で使うシステムなら問題ないんだけどな
Oracle/Access+VBのシステムなんかよくあるし
PHPだって変数名ですら全角文字でもOKなんだし

520:nobodyさん
09/01/28 19:00:41
>>519
全角って、そんなに変じゃないの?
bakeする時に日本語で全部作ってくれると楽そうだなーって思ってた。
多言語化を考える必要なんて全くない物を作るのにi18nすら面倒で、
ソースに日本語のエラーメッセージを書いてやろうと思ってた。

521:nobodyさん
09/01/28 19:02:34
あ。でも、そうすると複数形ってどうすんだ?

522:nobodyさん
09/01/28 19:04:55
DB関連の開発系ツールも含めて全て対応出来てるんならいいんだろうけど
海外製のライブラリは対応出来てないものが多いし
結局、全角ゴリ押しは開発者側に負担を強いることが多いよ
プロジェクト内で使う環境を全部調査して、誰にも迷惑かけないと判明したら使えばいいと思うけど

523:nobodyさん
09/01/28 19:05:44
>>521
個別テーブル名定義で対応するしかないと思う
やったことないし試そうとも思わないから詳しくは知らない

524:nobodyさん
09/01/28 20:22:20
早速、日本語名utf8のテーブルやフィールドを作って、
cake bake allしてみた。
コンソールは微妙に文字化けしてたけど、難なく焼けた。
でも、アクセスしたらエラーが出た。ファイルを見たら、
ファイルがshift jisで認識されて、日本語部分は全部文字化け。

こんなことで苦労したくないので、これ以上は試すの止める。

525:nobodyさん
09/01/29 05:37:51
CakePHPは使ったことがありませんが、非常に興味があり質問させて
いただきます。

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

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

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




526:nobodyさん
09/01/29 11:43:51
>>525
新規案件だけにしたほうが苦労が少なくていいと思う

527:nobodyさん
09/01/29 11:51:59
>>525 思いついたところから書くと

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

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

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

ただ、Cakeに慣れるまである程度時間がかかるから、いずれにせよ新規アプリから始めないと、苦労すると思うよ。

528:525
09/01/30 06:58:44
>>526, 527
レスありがとうございました。
やはり新規案件からCakePHPをはじめたほうが無難ですね。
スキルを醸成してから、既存システムの変更を検討します。


529:nobodyさん
09/01/30 11:51:03
自作クラスのインスタンスを得るにはどうすればいいの?

データを引数に持たせてインスタンス同士をいろいろ比較してくれるクラスを
昔作ったんだけどどう持ち込めばいいのかわからない

530:nobodyさん
09/01/30 17:53:58
ポケットリファレンスを見てるんだが。
1.2になってModel::findが大幅に機能強化されたのに、
記述が少なすぎる。もしくは、Model::generateList()
のページに代わりの方法が書いてあればいいが、
Model::find()だけでは意味不明だろう。

531:nobodyさん
09/01/30 18:27:52
>>530
おとなしく改訂版を待ってろ

532:nobodyさん
09/01/30 18:55:05
改訂版って出るの?

533:nobodyさん
09/01/30 19:21:00
コントローラから2つのモデルとデータをやり取りする場合、
アソシエーションを使う方がいいのか、
Controller::usesで直接指定する方がいいのか。

534:nobodyさん
09/01/30 19:29:43
アソシエーション使うと結果変わる事ない?
たぶん親モデルと関連してるレコードしか該当しないよ

535:nobodyさん
09/01/30 23:31:39
コントローラからコントローラへデータを渡すのって、どうするの?

536:nobodyさん
09/01/31 01:44:15 ZNZRtHpp
flash

537:nobodyさん
09/01/31 04:27:13
>>536
なるほど。
urlでパラメータを渡すなら、redirectでも良さそう。
でも、urlだと大きなデータは渡せないよね。
データが丸見えになるし。

あと、同じウィンドウの中でのみ渡すってなると、
どんな方法が良さそう?

538:nobodyさん
09/01/31 04:30:59
>>537
まあなんだ。
ウェブアプリはデスクトップアプリと
考え方が違うが・・・
まあ、がんばれや。

539:nobodyさん
09/01/31 05:48:56
Session->renew()で新しいsession_idを割り振れば
いけるかな?と思ったが、甘かった。同じブラウザでは
renewする前のが消える。
別のブラウザなら大丈夫だった。(当たり前か)


540:nobodyさん
09/01/31 08:38:22
解決。セッションの使い方を間違ってる。
ユニークキーの発行が正しい。

541:nobodyさん
09/01/31 09:18:36
Cakeユーザーの低レベルさが泣けてくる

542:nobodyさん
09/01/31 09:28:15
>>541
今CakePHPが注目を集めている為、素人が「PHPフレームワークなら俺にも何か簡単に
Webアプリが作れるかな。」という気になっているじゃない?
見方を変えるとCakePHPの功績は大きいかも?

543:nobodyさん
09/01/31 09:38:59
にしてもプログラマーと呼べないレベルの質問が多すぎる


544:nobodyさん
09/01/31 09:47:48
そろそろsymfonyの時代か・・・?

545:nobodyさん
09/01/31 10:44:44
それでも作れちゃうなら凄いこと

546:nobodyさん
09/01/31 10:46:19
そんなレベルの人が正しくフレームワークを使いこなせてるとは思えない
保守不可能なシステムを作ってそう

547:nobodyさん
09/01/31 11:16:37
Web屋と呼べないレベルではあるが
exe屋だったら最初そんなもんだろ。
まあ、フレームワーク知識自慢しかできないようじゃ、
お前らすぐに抜かれるよ。

548:nobodyさん
09/01/31 13:50:46
>>529
自作クラスなんてコンポーネントにしちゃえばいいよ。
で、コントローラーで
$this->Myclass->eat('hoge');

で。

>>535
作り方としてデータを渡したいような内容のものがあるならモデルに書いた方がいい。
で、コントローラーからそのモデルのアクションを読み出してデータを取得。

549:nobodyさん
09/01/31 16:13:14 x6QrlarV
authcompornentでユーザ登録した後、自動的にログイン状態に遷移する処理について
なにか方法があれば教えていただけませんでしょうか?

550:nobodyさん
09/01/31 16:23:21
マニュアルを読め

551:nobodyさん
09/01/31 17:40:26
データが全然こなくて小一時間悩んでたけどconditionsて書く所がconditonsになってた~ 時間返せー

552:nobodyさん
09/01/31 17:50:06
色々読んでみたが、結局趣味でやるぶんにはイイFWってことか

553:nobodyさん
09/01/31 18:44:40
>>551
あるあるwwww
JavaScriptでもundefinedとunidentifiedをよく間違えるんだよな

554:nobodyさん
09/01/31 18:55:23
配列仕様だからそういうミスしても分からないんだよね
なにかあるたびに配列にミスが無いかチェックしてるわ

555:nobodyさん
09/01/31 19:10:10
よく使うやつはテキストエディタの強調表示設定に入れておくのが吉

556:nobodyさん
09/01/31 19:38:57
symfonyを採用したオープンソースのSNS OpenPNE3.0が1/27にリリースされたそうな。
URLリンク(www.openpne.jp)
と言う事は、OpenPNE3.0はPHP4のサーバにはインストール出来ないと言うことか?
多くのアプリがPHP4で開発されたもので、PHP5での稼働が保証されていないので、
サーバのPHPを5に出来ないんだよな。

557:nobodyさん
09/01/31 21:24:40
>>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)ってするつもりだった。
だけど、このやり方って変?

558:nobodyさん
09/01/31 21:53:45
>>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


559:nobodyさん
09/01/31 23:42:40
コントローラーから別のコントローラーに値を渡す方法と言われて、セッションとかそういう話じゃなかったことしかないな

560:nobodyさん
09/02/01 01:12:20
質問です。

$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つめのデータが表示されません。何が原因なのでしょうか?

561:560
09/02/01 01:26:07
すみません、追記です。
PHPのバージョンは5.2.8、CakePHPのバージョンは1.2.1.8004です。

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


よろしくお願いします。

562:nobodyさん
09/02/01 22:33:35
>>560
よくわからんけど。
Tagの添字のID=1が二つあるからじゃね?
それ以外の条件での検索については、エラーは出ないし。


563:nobodyさん
09/02/01 22:46:30
ちょっと複雑?なアソシエーションについて教えて。
基本は A hasMany B , B belongTo A なんだけど、
AとBは hasAndBelongToMany でもある。
(Aが担当教員で、Bが生徒と思えば。
Aの中に担任が一人居るような感じ。)
belongTo のAと、hasAndBelongToManyのAsを
どうやって取得し分けたらいい?


564:nobodyさん
09/02/02 01:23:57
>>563
アソシエーションのbindとunbindを使い分ければいいんじゃない?

565:nobodyさん
09/02/02 05:46:05 lBmCzdKa
1.2でpaginatorを1画面に複数使う方法が書いてあった
blog、どこにあったか知ってるひといたら教えてプリーズ

あとで見ようとしててどっかにいってしまいました

566:563
09/02/02 15:51:42
>>564
一方を取得したくない時には、それでいけそうです。ありがとう。

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

[B] => Array
(
[id] => 1
[name] => hoge
[0] => Array
(
[id] => 1
[name] => hoge
[AsB] => Array
(
[id] => 4
[A_id] => 1
[B_id] => 1
)
)
)
これ、どうやって分離する?
もしくは、別々の変数でとり出す方法は?
それとも、そもそもデータベースの設計がおかしい?

567:nobodyさん
09/02/02 16:28:39
>>566
良くのみこめてないけど、tableに問題がありそうなきがする
teachers , students があるのかな?
classes があればすべて解決するような気がするけど違うのかい?

568:563
09/02/02 19:05:21
Authも兼ねるつもりなので、 A hasMany B のAはusersなのです。
だからgroupsも作ってあるけど、classesやgroupsのいずれでも
B blongsTo~の関係にならないのです。


569:nobodyさん
09/02/02 19:06:34
URLリンク(www.google.co.jp)

逆転しそう

570:nobodyさん
09/02/02 19:55:59
>>568
いやいやそういうこっちゃないでしょ

もっと具体的に書いてみたらどうよ。
「A hasMany B , B belongTo A なんだけど、 AとBは hasAndBelongToMany でもある」って言われてもねえ
関係するModelと、そこで使われているアソシエーションの内容を、具体的にたのむ

571:nobodyさん
09/02/02 20:48:11
>>569
これってGoogleでの検索件数のトレンドグラフだよねえ。
CakePHPは色々と問題が多くて、その解決法を探す為にみんなせってと「CakePHP」
キーワードで検索をしている。だから最近検索件数がウナギ登りなんだ。
と言う見方もあるのかなあ?世間の注目を集める為のCakePHPの戦略では?

572:nobodyさん
09/02/02 21:19:08
>>566
必要なデータを得られるfindをして、自前で工夫すればいいんじゃないかな

573:563
09/02/02 21:22:19
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));


574:563
09/02/02 21:23:10
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のデータだと思う。


575:nobodyさん
09/02/02 22:34:43

var $hasMany = array('Profile1' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
),
'Profile2' =>
array('className' => 'Profile',
'foreignKey' => 'user_id',
)
);

576:563
09/02/02 22:56:48
>>575
それだ!!うまくいきました!多謝多謝

577:nobodyさん
09/02/03 09:54:32
モデル間のデータのやり取りや、
一つのモデルで複数のフィールドの
データを操作するのって、どうやるの?
というか、そういうのは奨められない?

あるフィールドにデータが書き込まれたら、
同時に別のフィールドにもデータを書き込みたい。
(DBの設計がそもそも冗長との批判は分かる。)

578:nobodyさん
09/02/03 10:15:42
>>577
afterSave , afterDelete

579:nobodyさん
09/02/04 16:42:15
セレクトメニューを作るために、find('list')で配列を取得して、
この配列の先頭に、例えば、
$sel[0]='ここから選んで';
みたいなのを追加するのって、どうする?

array_unshiftだと、IDに当る数字が再割り付けされてしまう。


580:nobodyさん
09/02/04 17:30:08
formヘルパーのオプション指定にそういう機能が無いかと
配列に直にデータを入れてバリデーションと合わせて簡単にやれないかを検討する

581:nobodyさん
09/02/04 18:18:31
ポケットリファレンスだと、そもそも
$form->input('sel_id')
の説明が無いんだよなー。
$form->selectにもなさげ。

配列に直にデータ入れて、ksortでできたからいいか。


582:nobodyさん
09/02/04 18:39:48
>>581 え?
$form->select()だと第5引数showEmptyに文字列指定
調べてないけどinputもいけるはず

583:nobodyさん
09/02/04 19:26:25
ほんとだ。出来た。
そうだよなー。素人の私でも、出来ないと不便だって思うもんなー。

584:nobodyさん
09/02/04 23:27:52
ポケットなんとかがどんなもんだか知らないけど、まずマニュアル見ましょうよ。
せっかくCakeは日本語ドキュメントが充実してるんだから。

585:nobodyさん
09/02/05 00:17:23
うむ・・・おっしゃる通り。結局、Webの日本語マニュアルが一番参考になってる。
これだけでもCakePHPを選んで良かったと思う。
だけど、紙の本で探す方が早い事も多いし、狭い画面でやってるのでwebマニュアル
を開いてる場所が無いのです。
ポケリファの1.2.1対応した改訂版が早く出て欲しい。できれば、Authとか1.2の
新機能をきっちり説明して欲しい。

586:nobodyさん
09/02/05 00:26:39
1.2stable出たし、各社対応版発売を狙ってるでしょ
逆引き的なのは欲しいなぁ~

587:582
09/02/05 09:29:26
>>584
まずマニュアル見ようというのは同意だけど、マニュアルの記述がまだまだ不完全なのは事実

今回の件であれば
select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)
空の選択オプションを表示したくない場合、$showEmpty を false にします。
と、ある
boolean の引数にテキストを指定するなんて、URLリンク(api.cakephp.org) でソースを見るしかない
(今回はポケットリファレンス見たというから、つっこんだまで)

588:nobodyさん
09/02/05 09:35:20
>>581
付け加えると、詰まったら URLリンク(api.cakephp.org) を見るのが、一番手っ取り早い
こっちは、マニュアルよりは更新早いし、最終的にはソースを追えるし
まあ、がんばってくれ


589:nobodyさん
09/02/05 17:58:21
findAll で フィールド price か item のどちらかにマッチするというクエリを書く場合って
どうすればいいの?

590:nobodyさん
09/02/05 18:28:27
>>589

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

こんな感じ

591:nobodyさん
09/02/05 18:29:43
>>590
ありがとう!
その前にMYSQLが日本語ひっかからないという。。。
なんでだろ。
参考になりました。ありがとうございます。

592:589
09/02/05 18:34:16
cakephp とは関係ないと思いますけど
$option = array('Faqlist.name LIKE BINARY' => $str);

ってBINARY ってのをつけると 日本語もうまくひっかかるようになります。
今まではちゃんとひっかかってたのに。MYSQLの仕様がかわったのかなー

593:nobodyさん
09/02/05 18:52:42
>>590
"or"とか入れなくても良いんでしたっけ?

594:nobodyさん
09/02/05 18:55:11
db側の文字コードがLatin1とかだとBinaryで処理するしかないってことだと思うけどね。

595:nobodyさん
09/02/06 03:00:32
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になってしまった。

何か良い方法無い?


596:nobodyさん
09/02/06 08:05:18 OIEK7Rhk
複製を残したいなら二回saveする必要があるんじゃねーか?

597:nobodyさん
09/02/06 09:38:20
>>595
どのように複製したいのだろうか?
updateだろうがinsertだろうが、同じデータをinsertするということなら
afterSaveで、create後saveすれば良いと思われ
別のDBに保存したいというのならuseDbConfigを変更してsaveかな?

いずれにせよafterSaveじゃないと、validationErrorのときにもsaveされちゃうんじゃないかな

598:nobodyさん
09/02/06 10:28:16
>>596,597
複製って表現が違ったかもしれん。すまん
「バックアップを残す」って感じ。
既存のデータの編集の際、既存のデータは
そのまま(削除のフラグを立てる)で、
新しいidで保存したい。

すると、afterSaveでは上書きされた後だから
ダメでしょ? そこで、beforeSaveでidを
空にすれば新しいidで保存されるかなと思ったが、
なぜか上書きされてしまった(前者)。
コピーしたデータで書き込んだら、createの
情報が抜けてしまった(後者)。という次第であります。

599:nobodyさん
09/02/06 10:42:52
>>599
履歴を残すってことね。理解した。
でも、それでもafterSaveだろう
新規のデータをinsertして、afterSaveで既存のデータをupdateする感じじゃないかな
URLリンク(book.cakephp.org)
beforeSaveはあくまで保存するデータをいじったりするときに使うものだと思うよ
>>597のvalidationErrorのときにもsaveされるは間違いのようだ

600:nobodyさん
09/02/06 10:53:08
>>599
>新規のデータをinsertして、afterSaveで既存のデータをupdateする
 ↑
この処理はコントローラに書くことになるよね?
どこかで、「ビジネスロジックはモデルに」なんて書いてあったので、
モデルに書く方法を考えてた。(コントローラからは普通にsaveしてる
ように見えるけど、モデルの方でバックアップを残してる、って感じ)
もしくは、モデルに上記の処理をするメソッドを作る方法もある?
Model::save()を上書きしたら・・・さすがにややこしいことになるよな。

601:nobodyさん
09/02/06 11:04:42
>>600
afterSaveと言ってるくらいだから、Modelでしょーが
おまいさんのいうように、自動的に履歴が残るぞ。
まずは、マニュアル読んでコールバックメソッドを理解するべし

602:nobodyさん
09/02/06 11:08:14
あ。そうか。ちょっと勉強して、試してみる。

603:nobodyさん
09/02/06 11:16:38
>>602 Have a nice cooking !

604:nobodyさん
09/02/06 12:54:05
>>601
「新規のデータをinsertして」もModel??
その後、afterSaveの中でgetIDできるのは
新しい方のデータで、既存のデータのidは
取得できないのでは?


605:nobodyさん
09/02/06 12:58:50 Fuxx6e9Y
バリデーションが効かない。助けて下さい。

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

var $validate = array(
'xxx' => array(
'rule' => VALID_NOT_EMPTY,
'message' => '必須項目です。'
)

606:nobodyさん
09/02/06 13:12:45
>>604
それは、Controller
既存のidについては、自分で工夫してみてくれ。getIDする必要があるとは思えんから

607:nobodyさん
09/02/06 13:51:55
>>606
ありがとう。わかりました。

いくつかのモデルで同様の処理が有るので、
メソッド作って、AppModelに書いてみました。

608:nobodyさん
09/02/06 14:27:27
CakePHPってXSSとかSQLINJECTIONに対応してますか?
自分で処理するしかないですあk?

609:nobodyさん
09/02/06 14:49:58
基本的に処理はされるが、知らずに穴を作ることはできるので、
自分で意識する必要はある。当然だが。

610:nobodyさん
09/02/06 16:08:24
>>608
XSSやSQLインジェクションの仕組みと対策方法を知っていれば、
おのずと分かる話だと思うが?

611:nobodyさん
09/02/06 16:17:31
Cakeのセキュリティ関係はあまり信用出来ないけど


612:nobodyさん
09/02/06 16:32:25
さすがにXSSについては、Helper使わない限りは、自分でh()に通すしかないわな

613:nobodyさん
09/02/06 16:44:06
Ajaxしてると見落とすこともあるかも。

614:nobodyさん
09/02/06 22:15:58 OIEK7Rhk
これってDBにロックかけることってできないの?
BEGINでトランザクション開始
SELECT FOR UPDATEで更新用データ取得と同時にロック
UPDATEでデータ更新
COMMITでトランザクション終了

みたいな感じにしたいんだけど、SELECT FOR UPDATEって
どうやって設定してやったらいいんだ?

615:nobodyさん
09/02/07 09:27:29 u7AiZVmn
webrootの.phpファイルからcakeのコントローラを読んで
表示したいのですが、
includeでコントローラが読めませんでした。

viewにすれば解決するのはわかるのですが、
外部からcakeの結果を受けとることって無理なんですかね?

616:nobodyさん
09/02/07 10:22:18
>>615
(今考えている解決方法がどうやったらできるかじゃなくて)
具体的に今抱えている問題を書き込んだほうが、解決につながりやすいと思うよ

webrootにphpファイルを置くというのは、方向性が間違っている可能性が高い

617:nobodyさん
09/02/07 18:26:40
複数のモデルデータを保存したい時ってどうやってる?
条件としてはどちらもバリデーション通ったら保存。

バリデーションチェックとその表示との両立が上手くできない。

618:nobodyさん
09/02/07 18:37:09
>>617
'validate' => 'first' でsaveAll()

URLリンク(book.cakephp.org)


619:nobodyさん
09/02/07 19:28:59
>>618
明確な答えをありがとう。
フォームのバリデーションエラー表示も少してこずりましたが試して見ます。
saveAllをネット上の情報で試したんですが、エラー表示がきちんと出なかったんですよね。
フォームヘルパーの指定方法の問題じゃないかと思っていましたが。

taskモデルと、アソシエーションしたTimelineモデル(hasMany)のフォームはこんな感じで書いてます。
echo $form->input('task');
echo $form->input('Timeline.progress');

ちょっと前見たときはsaveAllの説明なかった気がするのは気のせいかな・・。
履歴を見ると気のせいじゃない気もする、今月に入って誰か訳してくれたんだねありがとう訳者さん。

620:nobodyさん
09/02/07 23:38:50 K4fXwaLQ
「マニュアル/開発例/ACLを制御するシンプルなアプリケーション」で
User自身が書いた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;
}

こんな感じとか?


621:nobodyさん
09/02/07 23:48:49
URLリンク(book.cakephp.org)

622:nobodyさん
09/02/08 00:16:52 XBcxfvCP
TRPGオタしか喜ばなそうな上記説明を熟読すれば、
「マニュアル/開発例/ACL~」のサンプルで
id:1のUserのみがuser_id:1のPostを編集できるようにできるんですか?

623:nobodyさん
09/02/08 01:12:57
>>622
「TRPGオタしか喜ばなそうな上記説明を熟読すれば、」ってことは、
ちゃんと読んでないのか。
マニュアルくらい読めよw

それとも読めないくらい馬鹿なの?ww
もしそうだったらごめんねwww


624:nobodyさん
09/02/08 02:18:10
>>622
マニュアルの更なる理解のために「指輪物語」を読破するんだw

625:nobodyさん
09/02/08 02:30:48
formヘルパーで、複数のテキスト入力boxを
1行に並べるのって、どうするの?


626:nobodyさん
09/02/08 04:45:10
>>625
自分でフォームを書く

627:nobodyさん
09/02/08 04:56:26
>>626
えっ、マジ?

628:nobodyさん
09/02/08 11:29:47 XBcxfvCP
いや、読んだ上で言ってるんだが。。。

これだとテーブル単位では大丈夫だけど、レコード単位での権限の設定が
できないんじゃないかと思うんだが、違うのか?

なんか、ここはレベル低いなぁ。

629:nobodyさん
09/02/08 11:49:57
その処理は、自分で書くんだよ。
自分が投稿したやつだけ編集できるって。
当たり前だろ。

管理者は全員のものを編集できるかもしれないし、
別に編集者という人を作るかもしれない。

誰が何を編集できるかを決めるのはお前。
よってお前がそういうコードを書く。OK?

レベルが低いのはお前。

630:nobodyさん
09/02/08 12:03:59
>>625
tableタグ使うと$form->text()を1行に並べること出来るよ。
後は、app/webroot/css/cake.generic.cssの内容を自分の好みに編集するだな。
(でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)

631:nobodyさん
09/02/08 12:10:49
'div' => 'false' とかで横に並べられた気もするが・・・

> (でも、なんでCakePHP1.2のdefaultのcssはこんなに変態なのだろ?)
同意。デフォルトのフォントの大きさとかマージンとか
各ブラウザの間での違いを吸収する程度にしておけばいいのに。


632:nobodyさん
09/02/08 12:17:33 XBcxfvCP
>>629

> その処理は、自分で書くんだよ。

いや、書かなきゃならないのは、最初からわかってるよ。
でも、どこに書けばいいのかがわからない。

isAuthorized()やbeforeFilter()に書くのか?

633:nobodyさん
09/02/08 12:21:23
チケットを投げるんだ。

Summary: "cake.generic.css" looks like hentai
Type: RFC

634:nobodyさん
09/02/08 12:23:13
>>632
ご飯から食べるか味噌汁から食べるか。
好きにしろw

635:nobodyさん
09/02/08 13:06:23
>>631
<?php
echo $form->text('hoge0', array('div' => 'false'));
echo $form->text('hoge1', array('div' => 'false'));
echo $form->text('hoge2', array('div' => 'false'));
?>
これでは縦に3つ並んでしまったが、こんな書き方ではないのかな??

636:nobodyさん
09/02/08 13:29:45
>>628
レベルが低いのはお前の頭

637:622
09/02/08 13:32:48 ByGZ6/FB
>>632
教えてやるから土下座して「自分の頭の程度が悪うございました」とPCの前で言え

単にACOにmodel,foreign_keyを目的のレコードのものに設定して登録して、
AROとACOの関係を定義するだけ
ACO登録位置は種類考えて適宜選べ

関係の定義とチェック関数については>>622に書かれてる

638:621
09/02/08 13:33:26 ByGZ6/FB
622じゃなくて621だった

639:nobodyさん
09/02/08 14:40:18
CakePHPで掲示板作れます?

640:nobodyさん
09/02/08 14:43:20
>>639
お前は何を言っているんだ?

641:nobodyさん
09/02/08 14:45:17
>>640
質問しているのです。

642:nobodyさん
09/02/08 15:03:43
>>641
はいはい、ソーデスネ。
次のネタが思いつかないので、マジレスする。
作れます。
以上。



643:nobodyさん
09/02/08 15:04:30
>>639
ベタのPHPで作るより、短時間で、高機能(Ajaxなど)な掲示板が作れますよ。
がんばってください。

644:nobodyさん
09/02/08 16:07:39
>>642-643
がんばります!

645:nobodyさん
09/02/08 16:20:11
自分の頭の程度が悪うございました

646:nobodyさん
09/02/08 16:26:13 SHT1by4H
バリデーションで、一つのフィールドに対して、
複数のルールを設定していた場合に、
一つのエラーが検知した場合以降の
バリデーションはおこわないことは、出来ますか?

例えば、期間の入力があった場合、入力値が正しく
なかった場合、その後の妥当な期間であるかどうかの
チェックはいらないのですが。

647:nobodyさん
09/02/08 16:41:27
>>644
これから始めるなら、この本お勧め。
「CakePHP徹底入門」 CakePHP1.2で説明してあるから、とても楽に入門できた。
URLリンク(www.amazon.co.jp)徹底入門-イージーゲート/dp/479811717X
↓このページも入門者にお勧めかな。
URLリンク(kuri6005.sakura.ne.jp)

648:nobodyさん
09/02/08 16:53:37
>>646
URLリンク(book.cakephp.org)
'last' => true

649:nobodyさん
09/02/08 17:20:04
>>648
ありがとうございます。
すみません。
しっかりと説明されていますね。
もっとちゃんと読まないといけませんね。

650:nobodyさん
09/02/08 17:46:55 srWubjja
携帯対応ページを作ろうと思って、/m/でリクエストされたら携帯ページを表示ってやろうとしていて
表示はうまくできたんですけど、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を
自動生成してるんでしょうか?
だとしたらどうやったらうまく解決できるんでしょうか?

651:nobodyさん
09/02/08 18:01:22 srWubjja
すんません、Router::Connectをコメントにしたらちゃんとうごきました。
ということは$form->createではこれをみてURLを生成してるんですね。
携帯、PCの両用サイト作ってる人はどうやって解決してるんでしょうか?

652:nobodyさん
09/02/08 21:16:52
>>647
ご丁寧にありがとうございます。
明日の夜にでも本屋に行ってこようと思います!

653:nobodyさん
09/02/08 21:59:25
URLリンク(cakephp.jp)

654:nobodyさん
09/02/08 22:39:55
>>635
うちもそれ試した。3行になっちゃった。
やっぱ、>626の言う通り、自分で
フォームを書かないといけないのか・・・マンドクセ

生年月日を入力させるのに、セレクトメニューでは
不便なので、直接「年」「月」「日」の数字を
入力させたいのね。
何か、簡単な方法ある?

できれば、年号(MTSH)が付いてると西暦に直して
欲しいんだけど・・・(そこまで求めるのは無理か。)


655:nobodyさん
09/02/08 22:49:40
素のhtmlのタグを、cake流に変換するようなフィルタとかあればいいなー

656:nobodyさん
09/02/08 23:14:43
>>654
'div' => false にして、出てくるフォームが改行されるのは、FormHelperの問題と違う。
CSSでそう指定してあるから改行される。

input {
clear: both;
}

みたいな感じで。

いっぺん、読み込んでるCSSファイルを移動するなりして、読み込めないようにしてみろ。


657:nobodyさん
09/02/09 00:07:57
>>656
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>

658:nobodyさん
09/02/09 00:13:00
何で変態CSSのために
無駄な労力使ってるんだw

659:nobodyさん
09/02/09 00:18:41
>>658
暇で他にやる事もないので、チョットやってみただけ。

660:nobodyさん
09/02/09 01:19:15
てことはCSSを、YUIとかのリセットに変えればいいだけか

661:nobodyさん
09/02/09 02:53:29
>>659
じゃあ僕のサイト作るの手伝ってくれません?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch