【PHP】フレームワーク CakePHP 17ホール目【v2.4】at PHP
【PHP】フレームワーク CakePHP 17ホール目【v2.4】 - 暇つぶし2ch2:nobodyさん
14/03/01 17:22:09.46
>>1
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
スレリンク(tech板)

3:nobodyさん
14/03/02 02:24:24.71 QhD3xIFD
鯖がかわたったら大文字/小文字を識別するようになってエラー吐きまくり、だれか助けて

4:nobodyさん
14/03/02 08:29:45.89
全部リネーム(投げやり)

5:nobodyさん
14/03/02 09:04:59.82
>>3
直せ

6:nobodyさん
14/03/02 13:37:20.90
CakePHPの統合開発環境って何ですか?
Eclipseですか?Vimですか?

7:nobodyさん
14/03/02 15:36:38.69
NetBeans

8:nobodyさん
14/03/02 16:00:53.07
おつかれさまんこ!

9:nobodyさん
14/03/02 22:24:22.81 YQtz6+zn
PHPStorm
じゃないの?

10:nobodyさん
14/03/03 08:24:44.02
期待ほど補完してくれない

11:nobodyさん
14/03/03 11:56:50.46
PHPStormはほぼ補完してくれる

12:nobodyさん
14/03/03 16:36:59.02
URLリンク(dab1nmslvvntp.cloudfront.net)
海外と日本では世界が違うんだな

まだまだ日本ではCakeの利用率がかなりを占めるのにな

13:nobodyさん
14/03/03 17:21:42.40
Laravel? 初耳

14:nobodyさん
14/03/03 18:01:53.20
正直、やりたいことが手堅くできるならfwなんて何でもいい。

15:nobodyさん
14/03/03 18:04:37.86
>>12
作ったら終わりが多い日本だとな
cakeが流行るんだよ

laravel、phalconに比べて
一から作るときの生産性はまだまだcakeが上

16:nobodyさん
14/03/03 18:10:17.48
その通り、移行なんてする気ない
PHP5.2から5.4にするだけでかなり腰重かった

17:nobodyさん
14/03/03 18:17:33.98 fO6d1b91
Java使いなのですがEclipseじゃダメですか?
PHPStormの方が優れている点を教えてください。

18:nobodyさん
14/03/03 21:08:20.37
>>17
俺、両方使ったけどどっちもどっちだわ。
ただ、イクリプスのがもっさりしてるからだめだわ。

19:nobodyさん
14/03/03 22:20:41.05
>>17
EclipseでJavaの開発してたものだけど
PHPの開発においてはPHPStorm一択だね

補完が優秀、最新バージョンへの追従が早い、Intentionsが優秀
要はPHP専門部分が強いのよね

WebStormを内包してるのもGood
難点は、有料、英語

EclipseがPHPでの開発において勝ってる点って
難点の2個しかないんじゃないかな

20:nobodyさん
14/03/04 00:08:55.15
netbeansもよろ

21:nobodyさん
14/03/04 00:17:04.37
eclipse
php storm
dreamweaver
net beans

全て使った上で俺はdreamweaver。
デザインも両方やると、やっぱりDWが一番だわ。

22:nobodyさん
14/03/04 00:53:16.41
DeamWeaver で CakePHP を開発してるってこと?

23:nobodyさん
14/03/04 05:53:13.25
デザイナーってのがよくわからないんだけど、
デザイナーってjQueryとか使う?
Photoshop使って画像を作るだけ?
画像の動きまでプログラミングするの?

24:nobodyさん
14/03/04 07:01:44.55
sass、less使わないのか

25:nobodyさん
14/03/04 07:06:42.25
Sublime Text!

あっ、エディタはお呼びじゃないっすか…

26:nobodyさん
14/03/04 13:52:11.38
>>22
そうだよ。
プラグインも自分で開発してるからMVCの移動も楽だし。

27:nobodyさん
14/03/04 15:42:27.40
慣れてるのが一番や

28:nobodyさん
14/03/04 18:48:55.56
デザイナーって画像作ってるだけじゃないの?

29:nobodyさん
14/03/04 19:34:01.40
最近のWebデザイナーはWordpressとかJavaScriptとかでプログラミング当たり前になりつつある

30:nobodyさん
14/03/04 20:53:55.54
>>29
昔に比べて、画像のデザインの需要はなくなったよね。
ほぼCSSで賄える。

31:nobodyさん
14/03/04 21:10:49.21
楽しいPHPerの仲間がぽぽぽ~ん

32:nobodyさん
14/03/04 22:10:44.66
>>30
しかもSCSSとかCompassとか出てきて無縁ではいられないな

33:nobodyさん
14/03/05 02:59:19.79
DWで開発とか猛者すぎる

34:nobodyさん
14/03/05 08:05:21.32
>>33
デザインとcakephpやる人は、
アプリ切り替えるんかな?

35:nobodyさん
14/03/05 08:22:44.09
DWとか補完ねーだろ、知らずに言ってるけど

36:nobodyさん
14/03/05 11:36:59.89
うちのデザイナ兼コーダーはPHPStormとFireworks使ってるな
DW使う余地はないらしい

37:nobodyさん
14/03/05 15:32:41.15
>>35
補完ないけど、手打ちした方が早いと個人的に思ってる。

俺は f, を押すとfunction
ts を押すと$this-setが出るようにしてる。

38:nobodyさん
14/03/05 15:39:28.53
みんなWindowsで開発して
レンタルサーバーはLinuxなの?
それともレンタルサーバーもWindows?

39:nobodyさん
14/03/05 16:03:27.33
>>38
前者です

40:nobodyさん
14/03/05 20:48:51.34
IDEの補完の恩恵って速さもあるけどミスが減ることだと思う

41:nobodyさん
14/03/05 21:20:36.95
純粋にWindowsで開発するの?
Linux on VMとかそういのじゃないよ。

42:nobodyさん
14/03/05 21:22:19.75
ここでMacの人が通りますよ…
もともとDTPだけだったんですがね、どうしてこうなった

43:nobodyさん
14/03/05 23:39:42.38
手打ちが速いとかいうやつとは一緒に仕事したくねぇな
自分だけ石器時代にいること気がつかないのか

44:nobodyさん
14/03/06 01:34:18.88
Windowsで開発なんて苦行はもうやりたくねぇ。
ただ、最近Macたけーんだよなぁ。

45:nobodyさん
14/03/06 01:39:01.70
AdobeがLinuxに対応してくれさえすれば

46:nobodyさん
14/03/06 01:41:18.94
>>43
ボロボロ打ち間違えてコンパイラとか何やらに怒られまくる人いるよね

47:nobodyさん
14/03/06 16:30:29.55
コンパイラに怒られまくっているうちはいいよ。

48:nobodyさん
14/03/06 16:38:25.92
Vimで開発してる人いる?

49:nobodyさん
14/03/06 17:39:00.27
>>48
してる。けど時々嫌になる。
Ctrl+p があるから同じファイル内にある文字列なら補完してくれる。

50:nobodyさん
14/03/07 04:26:25.69
vimでやっとるよ

51:nobodyさん
14/03/07 23:51:55.49
xamppで開発してるの俺だけか・・・

52:nobodyさん
14/03/08 01:16:47.70
(´・ω・`)ノシ

53:nobodyさん
14/03/08 01:32:28.55
>>51
えっ

54:nobodyさん
14/03/08 02:06:28.48
AMPは全員じゃないの

55:nobodyさん
14/03/08 10:10:54.63
xampp&Dreamweaverで開発してるの俺だけか・・・

56:nobodyさん
14/03/08 13:25:58.29
>>55
せやな

57:nobodyさん
14/03/08 19:26:45.91
>>55
せやせや

58:nobodyさん
14/03/08 21:12:37.20
そいやそいやー!!

59:nobodyさん
14/03/09 09:34:45.06
>>51
ProductionもWindowsならいいとおもうけどね。

60:nobodyさん
14/03/10 01:08:03.93
最近nginx postgresqlの案件が多い
時代も変わったな

61:nobodyさん
14/03/10 01:14:07.27
一時 node.js x nginx の案件が続けてあったけど今はぱったりなくなった。

うちの開発力を考えてみたら、理由は何となく分かる。

62:nobodyさん
14/03/10 02:26:08.77
>>61
残念なんだな

63:nobodyさん
14/03/10 03:08:31.82
しかしとうとうApache一強とも言っていられないのか

64:nobodyさん
14/03/10 04:27:16.33
>>60
nginxはわかるけど、なんでいまPostgres?
なんかPostgres盛り上がる要因とかあったっけ?

65:nobodyさん
14/03/10 21:21:56.51
id、date、text、deleteというテーブルAと、
id、date、text、text2、deleteというテーブルBの2つから
deleteの値がbのものだけdateの値のascソートで
id、date、textをfindしたいんですが、どう書いたらいいですか?

66:nobodyさん
14/03/10 22:08:49.44
>>64
MySQLはOracleがしっちゃかめっちゃかにしてるから相対的に人気になってるんじゃね?

67:nobodyさん
14/03/11 00:15:01.95
>>65
SQLクエリをどう書くか考えて、それをfind conditionに落とし込む
頑張ってねー

68:nobodyさん
14/03/11 08:26:50.13
>>64
サーバー管理部門にpostgresを指定されたからって客が多い
互換性やライセンスで将来性に問題があるって言われることが多いよ

69:nobodyさん
14/03/11 08:34:20.29
何も考えず.net採用して高いライセンス料払うシス管よりだいぶ優秀だな

70:nobodyさん
14/03/11 08:50:55.26
クラウドではmysqlのほうが限界ありそうだもんな

71:nobodyさん
14/03/11 11:13:18.89
え、分散処理はMySQLのほうが上じゃないの?

72:nobodyさん
14/03/11 11:20:27.56
>>66
MariaDBもあるのにねぇ

>>68
将来性に問題があるのは、MySQLが?

ずっとPostgres押しな鯖管なのか、最近何か理由があってPostgresに乗り換えた鯖管なのか・・・
やっぱオラクルのせいかね。

海外製のフレームワーク使うときは、単純に利用実績が少ないだろうから、
PostgresとのI./F周りでバグが残ってそうでやなんだけどなぁ。

73:nobodyさん
14/03/11 11:54:25.66
phpとの親和性が高いから人気だと思う>MySQL
Postgresはインストールから複雑だからね

74:nobodyさん
14/03/11 12:06:44.94
>>73
インストールのどの辺りが複雑です?
手前でビルドするなりパッケージ管理使うなり
どちらもMySQLと差がないように見えるけど

75:nobodyさん
14/03/11 12:38:57.23
yumで管理して、バージョンも上げていくとなると
PostgreSQLのほうが断然楽ですよ

76:nobodyさん
14/03/11 13:39:09.07
ポスグレはWindowsに対しては入れにくい。

77:nobodyさん
14/03/11 18:31:47.62
>>74
「どの辺が」って言われたら答えづらいけど、俺には難しく感じたな。
phpMyAdmin的ツールもない(俺が知らない)し。

78:nobodyさん
14/03/11 20:38:18.52
日本はまだまだMySQL

79:nobodyさん
14/03/11 21:13:40.85
>>77
ウィザード方式のインストーラーがあっても難しいですか?

> phpMyAdmin的ツールもない(俺が知らない)し。
そのまんまphpPgAdminがあります

80:nobodyさん
14/03/11 21:20:51.46
PHPはまだまだMySQL

81:nobodyさん
14/03/11 22:01:55.52
>>79
>そのまんまphpPgAdminがあります
へぇ、いいこと聞いた

いや使わんけど…

82:nobodyさん
14/03/11 22:59:07.61
>>79
むしろ、ウィザード方式が難しいのかもしれないw

83:nobodyさん
14/03/11 23:18:26.22
Windowsだとな

84:nobodyさん
14/03/12 00:09:30.13
SQLite使ってる奴は居ないの?

85:nobodyさん
14/03/12 00:35:14.55
Android開発者が使ってるよ

86:nobodyさん
14/03/12 01:21:31.02 JpmxxtI4
SQLiteは無くならないだろ

87:nobodyさん
14/03/12 05:13:57.33
>>85
iCloudとの相性もいい

88:「ガスライティング 集団ストーカー カルト」で検索を!
14/03/12 10:17:56.59 lU6KEgTK
★マインドコントロールの手法★

・沢山の人が偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法


↑マスコミや、カルトのネット工作員がやっていること

TVなどが、偏った思想や考え方に染まっているフリや常識が通じないフリをする人間をよく出演させるのは、
カルトよりキチガイに見える人たちを作ることで批判の矛先をカルトから逸らすことが目的。

リアルでもネットでも、偽装左翼は自分たちの主張に理がないことをわかっているのでまともに議論をしようとしないのが特徴。
,,

89:nobodyさん
14/03/12 16:45:29.66
>>67
> SQLクエリをどう書くか考えて、それをfind conditionに落とし込む
どう書くか考えてわからなかったんです
説明難しい質問だったらすみませんでした

90:nobodyさん
14/03/12 18:07:22.48
俺もお前の質問の意味が分からん
自分でもわからないのに、他人がわかると思うか?

91:nobodyさん
14/03/12 18:09:07.22
>>90
この質問はわかるぞ。面倒だからスルーだが。

92:nobodyさん
14/03/12 18:11:24.37
わかるなら答えてやれよw

93:nobodyさん
14/03/12 18:27:18.86
UNION ALL使えば

94:nobodyさん
14/03/12 18:55:29.33
>>89
ならばスレ違いだ

95:nobodyさん
14/03/14 11:56:16.48
画像のアップロード処理ってコントローラーでやってます?モデルですか?
今までコントローラーでやっていたのですが、モデルでやるような気がしてきました

96:nobodyさん
14/03/14 12:48:14.25
>>95
悩むやつはだいたいモデルに置くべき
というか俺なら画像アップロードロジックだけまとめて別のクラスにして、モデルから委譲する

97:nobodyさん
14/03/14 20:57:46.25
>>96
とりあえずモデルにまとめましたが、画像の処理って難しいですね。
・アップロードした場合
・アップロードしなかった場合
・アップロードして過去のファイルがある場合
・アップロードせず過去のファイルがある場合

などの条件判定が必要だったりして、モデルの構成に時間がかかりました。
beforeSaveとafterSaveを使ってなんとかまとめましたが、
ビヘイビアか何かでまとめた方がいいかもしれません。

98:nobodyさん
14/03/14 21:38:04.58
ファイルアップロードのプラグインを使わない理由は?

99:nobodyさん
14/03/14 21:55:08.48
>>98
自由度を追求したいので。

100:nobodyさん
14/03/14 23:37:29.52
自由度を追求するレベルのやつは
こんなところでしょーもない質問はしない

101:nobodyさん
14/03/15 02:23:33.07
まぁええやんか

102:nobodyさん
14/03/15 09:07:57.50
ええよ

103:nobodyさん
14/03/15 11:18:24.50
>>99
It's Freedom.

104:nobodyさん
14/03/15 22:57:03.97
>>65
誰も答えてないんで作ってみた
テーブルの結合条件は知らんので適当に解釈してね
$params['joins'][] = array(
'type' => 'INNER',
'alias' => 'B',
'table' => 'b',
'conditions' => array(
'B.date = A.date',
'B.text = A.text',
'B.delete = A.delete',
)
);
$params['conditions']['A.delete'] = 'b';
$params['fields'] = array('A.id', 'A.date', 'A.text');
$params['order'] = array('A.date asc');
$this->A->find('all', $params);

105:nobodyさん
14/03/18 15:37:09.88
あるコントローラの特定のアクションのみ、URLを
URLリンク(example.com)
のように拡張子をphpにしたいです
ぐぐってもわからないのですが何かやり方はありますか?

106:nobodyさん
14/03/18 20:05:49.26
リクエストハンドラとルーティングかな
リクエストハンドラ要らんかもしれん

107:nobodyさん
14/03/19 19:49:36.31
fc2ブログのソースがcakephpみたいだ
実際は違うけど、開発した人は影響受けてそう

108:nobodyさん
14/03/19 20:01:23.03
ああ、なんか盛り上がってたね

にしても、なんかもっさい感じだな
コメントが日本語ってのもあるけどソースも…

109:nobodyさん
14/03/19 23:34:46.59
ただの普通のMVCやん
Cakeよりmicro系に近い
Cakeっぽさって何かある?

110:nobodyさん
14/03/20 00:08:10.16
ファイル構成がCakeっぽく感じたな。
zendとかsymphonyとかEthnaとか、
OSSならWordPressとかECCUBEとかphpBBとか
有名所は独自の構成だけど、fc2ブログはCakeっぽかった。
だから、君の言う「普通のMVC」がこうなのかは知らんが。

111:nobodyさん
14/03/20 00:42:22.76
WP, EC-CUBE, phpBB って、まじでグダグダだよな。
今さら手直し効かないレベル。
中の人もきっと諦めてるんだろう・・・

112:nobodyさん
14/03/20 01:36:29.70
WPはウンコすぎてあんなのが世界中で普及したのは愚かだ

113:nobodyさん
14/03/20 01:44:49.45
ECCUBEよりはましだよ

114:nobodyさん
14/03/20 07:02:02.26
symfonyもzend frameworkもCakeもディレクトリ構成は変わらんぞ
sがつくつかない、大文字小文字、省略形とかの差ぐらい

115:nobodyさん
14/03/20 07:30:03.64
どれもFWなんて似たようなものだな

fc2ブログのほうがcakephpより古いんだよね

116:nobodyさん
14/03/20 07:51:32.20
controllerの__constructでほぼ全てのことを行っているところに古さを感じる

117:nobodyさん
14/03/20 10:00:51.75
fc2ブログは意図的にコード減らしてるような気がするな
もちろん、オープンソースにするんだから当然なんだが

118:nobodyさん
14/03/20 15:13:14.69
今更、hasAndBelongsToManyの凄さを知った。
これ、めちゃくちゃ便利だな

119:nobodyさん
14/03/20 16:04:17.30
注意して使えよ
URLリンク(tech.a-listers.jp)

120:nobodyさん
14/03/20 16:15:47.05
バッドプラクティス(笑

121:nobodyさん
14/03/20 16:51:21.02
知りすぎてはいけないんだよ

122:nobodyさん
14/03/20 17:09:04.14
どっちにしろ多対多をするには、中間テーブルが必要だろ?
中間テーブル無しで管理する方法があるなら教えて欲しい

123:nobodyさん
14/03/20 20:34:48.05
中間テーブルがいけないなんて誰も言わない

124:nobodyさん
14/03/20 21:24:40.70
habtmはやりすぎな感じが嫌われてるんだろうね
Railsでもhmtに移行してるし

125:nobodyさん
14/03/21 00:20:48.70
countCacheとか便利過ぎる

126:nobodyさん
14/03/22 17:59:24.57
cakephp2.4.6でフィールドが「id、name、age、comment」とあるとして
$this->User->save(array('id' => 1, 'name' => 'aaa'), false);
こんな感じで更新しようとしたのですが、
なぜかage・commentがnullになります。

saveの前にcreateしても一緒です。こういう現象になった方、いませんでしょうか?
ちなみにjQueryを使ってAjaxで実行しています。

127:nobodyさん
14/03/22 18:41:02.58
プルダウンで日付セレクトするフォームで
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
...
<option value="31">31</option>
みたいのを生成してくれるヘルパーかプラグイン知りませんか?いちいち書くのめんどい

128:nobodyさん
14/03/22 18:58:26.38
JSでどぞ

129:nobodyさん
14/03/22 18:59:39.59
>>126
仕様でございます。

save()はPKがあればUPDATE、無ければINSERTだけど、
UPDATEの際渡されたデータに入れ替える。
ajaxじゃなく普通の更新フォームの場合、変更しなかったデータもPOSTされてくるから、
そういう問題になることが無いので、ajaxであれ?となるのはたまにあるな。

テクニックとして、save()の第三引数に、INSERT、UPDATEしたいフィールドを指定できる。

$this->User->save(array('id' => 1, 'name' => 'aaa'), false, array('name'));

こうすることでおそらく意図通りの動きをすると思うよ。

130:nobodyさん
14/03/22 19:02:18.13
>>127
普通にFormHelperで出来るような気がするけど。
まぁ日付となると、FormHelperは英語向けすぎてちょっと使いにくいから、
別途Helper作ることはあるけどさ。

131:nobodyさん
14/03/22 20:04:26.36
>>104
ありがとうございます
join使ってみます

132:nobodyさん
14/03/22 20:12:45.97
paginationを使って取得したものを
$paginator->numbers(true);でリンクを生成しました
記事が三件、limitを1にすると、23のリンクが生成されて、配列は一個だけ
2を押すとfoo/index/page~2に飛ぶのに1のときと同じ配列が表示され、23のリンクが生成されています
(2ページ目に飛んでいない)
3を押しても同様です
心当たりはbelongtoで他のdbのデータも引っ張ってきていることくらいです
何か特殊なケースはあるんでしょうか?
ご存知のかたご教示ください

133:132
14/03/22 20:40:23.27
すみません>>132です
conditionsの書き方に不備があっただけみたいです

134:nobodyさん
14/03/22 21:18:12.91
よくある

135:nobodyさん
14/03/22 21:33:09.93
>>129
おおおお、これははじめて知りました!勉強になります。
何時間も悩んでいたのですが、解決できそうです。
本当に助かりました。ありがとうございました!

136:nobodyさん
14/03/22 22:53:51.01
$this->Page->find('first');
の場合、どんな名前でsetしますか?
allとかpaginateを使う場合だと「pages」としているのですが、
1件取得するだけなので、単数形(page)の方が良いのかな?と悩んでいます。

137:nobodyさん
14/03/22 23:01:37.17
俺も最初同じような考えでそうしてたけど、色々やってるうちに煩雑になって複数形で統一してる

138:nobodyさん
14/03/22 23:36:58.97
単数形にするべきだろ

139:nobodyさん
14/03/23 00:28:11.20
ひとつなら単数形、複数なら複数形
単純明快だと思う

140:nobodyさん
14/03/23 00:57:04.37
firstならpage
allならpages
listならpages
countならpage_count

141:nobodyさん
14/03/23 01:01:42.86
listは配列が異なるから、page_listの方が良いな

142:nobodyさん
14/03/23 10:00:57.88
>>126
再現できないんだが。。。

143:nobodyさん
14/03/23 15:38:47.72
自分も>>126はヘンだと思ったので試してみたけど再現しなかった
わざわざ>>129みたいに第三引数を指定しなくても
第一引数のデータに含まれていないカラムは
INSERTでもUPDATEでも勝手にNULLになったりはしないはず
第一引数に余計なカラムが含まれていると疑ったほうがいいんじゃないかい?
あとjQueryとかAjaxとかはPHP側から見れば何の関係もないよ

144:142
14/03/23 17:13:40.00
>>143
同意

145:nobodyさん
14/03/23 20:23:17.81
cake関係ないけど、左上のアイコンって動いてたっけ?
URLリンク(jp2.php.net)

146:nobodyさん
14/03/24 03:32:24.08
>>143
あれ、そうだったっけ。
普通のformばかりで、たまにajaxでやると、何かであー・・・ってなった記憶があったから、
質問を読んで、それだと思っちゃった。

でも、逆に一部のカラムをNULLに戻すのはどうするんだったか・・・

147:nobodyさん
14/03/24 08:45:17.91
ajaxで空の(余計な)パラメータをクエリストリングにくっつけちゃってるんじゃね

148:nobodyさん
14/03/24 10:59:37.56
バリデーションで、inListの反対(配列に一致しないと成功)
というルールって無いですよね?
予約語となる名前を使用したらエラーを出したいのですが

149:nobodyさん
14/03/24 14:22:54.30
バリデーションくらい自作しちゃいなよ
ブール値返す関数だったらなんでも設定できるし

150:nobodyさん
14/03/24 16:13:10.55
HTML5でビューを作成しているのですが、
閉じタグを />じゃなくて > にしたいです。
何か設定項目があるのでしょうか?

151:nobodyさん
14/03/24 17:24:59.51
何がやねん?

152:nobodyさん
14/03/24 17:31:22.12
コアのHTMLヘルパー開いてソースいじれば?

153:nobodyさん
14/03/24 21:44:26.29
>>148
欲しいバリデーションルールがなければ簡単に自作できるよ
ライブラリのValidation.phpにルール名そのままの関数があるので
同じような形で関数を作ればいい
作った関数はモデルかビヘイビアで実装すれば
元々あるルールと同じように使えるようになる

詳細は以下のページを参考にどうぞ
URLリンク(book.cakephp.org)
URLリンク(book.cakephp.org)
※2.x系は日本語訳されてるページが少ない・・・1.3の情報でも問題ないはず

154:nobodyさん
14/03/25 00:00:22.77
>>153
自作できるのは知ってるのですが、
inListの逆はあるのかな?と思い、質問しました。
conditionsのNOT INみたいな感じであると思ったのですが

155:nobodyさん
14/03/25 00:47:37.46
>>150
自分もHTML式の記述にも切り替えられたらいいなと思うけど残念ながらなさそう
実現方法は下記ページの「HtmlHelper が出力するタグの変更」に載ってた
URLリンク(book.cakephp.org)

このマニュアルだとloadConfigを各ビューで呼ぶみたいだけど、
コントローラのヘルパー設定で
var $helpers = array('Session', 'Html'=>array('configFile'=>'html5_tags'));
みたいに設定すればloadConfigを自動的に呼ぶようになるみたい

156:nobodyさん
14/03/25 09:37:47.58
>>155
ありがとうございます!出来ました!
コントローラーから指定できるのが便利ですね。勉強になります。

157:nobodyさん
14/03/25 10:10:21.88
CakeにTwigView組み込んで使ってる人いる?
フィルタの追加方法を知りたいんだが

158:nobodyさん
14/03/25 11:56:36.78
1:フォームにて画像を登録する
2:以下のようにsetFlashにて成功メッセージを表示
$this->Session->setFlash('編集しました');
$this->redirect(array('action'=> 'edit'));

処理は実行されるものの、ブラウザキャッシュが残った状態になります。
ビューにCache-Controlのmetaタグを入れたり、
コントローラーに$this->response->disableCache()をしても変わりません。
なにかよい方法はないでしょうか?
ちなみにIE11やchromeでなり、firefoxではなりません。

159:nobodyさん
14/03/25 18:59:45.10
>>158
ブラウザキャッシュが残っている状態を、
もっと具体的に書いて欲しい。

160:nobodyさん
14/03/25 19:50:57.49
>>159
2でリダイレクトしているのに、1の画像が表示されます。
更新ボタンを押すと新しい画像に変わっているので、
ブラウザキャッシュが効いていると思われます。

161:nobodyさん
14/03/25 20:26:46.16
>>160
それなら、その場しのぎ的だけど、画像へのURLに
?t=23193123 みたくUNIXタイムスタンプつけたらいいんじゃね。
別URLになるからキャッシュされててもとりにくるはず。

162:nobodyさん
14/03/26 03:05:43.85
>>161
その機能あるけど。。。

163:nobodyさん
14/03/26 17:31:59.85
Treeビヘイビアを使う以外で、簡単に表示順番を変える方法ってないですかね?
カテゴリではなく、単なる一覧の表示順番を変えたいだけなので、
Threeビヘイビアで必要なカラム(parent_id、lft、rght)を追加するのは無駄に思いまして。

164:nobodyさん
14/03/26 18:54:27.87 BNu4KpVt
OrderableBehavior, SortableBehavior, PriorityBehavior とかあったと思う

今は自作で賄ってる

165:nobodyさん
14/03/27 01:08:52.80
>>164
OrderedBehaviorが一番有名みたいですね。
こちらを試してみます。ありがとうございました。

166:nobodyさん
14/03/27 01:40:31.88
>>162
あるけど?

167:nobodyさん
14/03/27 02:30:47.64
bakeで生成されるコードのエンコードを
デフォルトでUTF-8、LFにすることってできますか?
windows環境の話です

168:nobodyさん
14/03/27 05:28:16.61 GNd/C0+Y
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。

169:nobodyさん
14/03/28 17:36:04.92
ルーティングを以下のようにしているとします。
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

アクセスしたページがトップページ(ホーム)か否かを調べるのって
$this->params['pass']の中にhomeがあるかどうか調べる方法以外ありますでしょうか?

170:nobodyさん
14/03/29 07:45:47.19
何かスレ止まってると思ったら、板移転してたのか

171:nobodyさん
14/03/29 12:11:30.75
2chて何となく一人よがりでカッコ悪い

172:nobodyさん
14/03/31 18:12:43.27
お問い合わせ(inquiries)の返信テーブルを
inquiry_repliesかinquiry_messagesかで小一時間悩んでるんですが
どっちがいいと思いますか?

173:nobodyさん
14/03/31 18:48:56.48
>>172
返信用と分かってるならinquiry_repliesでいいんじゃねーの。
用途に合った明確な名前をつけるのは分かりやすくていいよ。
ただ、あとから返信以外の用途にも使うみたいなことになって、
名前と用途が合わなくなるというのも、ありがちな話。

これに1時間悩むんだったら、
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック とか
読んでみたらいいんじゃね?

命名の良し悪しは場合によりけりで、いくら考えてつけても裏目に出ることはあるし、
読んだからといって悩まなくなるわけじゃないけど。

174:nobodyさん
14/03/31 19:49:24.29
>>173
その本に命名規則について書いてあるんでしょうか?

正直、プログラミングよりも命名や設計で物凄く時間がかかっています。
後からやり直したくなることも何度かあるし。
やっぱり同じコード・同じ設計を何度も書くというのは避けたいので、
汎用性の高い、カスタマイズ性のある設計を考えるのですが、
そうすると時間ばかりかかって先に進めません

175:nobodyさん
14/03/31 21:19:58.42
汎用性はあまり考え過ぎない方がいい事のが多いけどね。
クラス名やメソッド名をBusinessLogicとかexecuteとかにしてあとあと泣くのは自分。

176:nobodyさん
14/03/31 21:29:42.21
>>174
規則については書いてないかな。
もっといえば、命名についてだけ書いてあるわけじゃない。
けど、読みやすいコードに、よく考えられた変数名は重要だし、
4部のうちの1部は命名に関してだよ。

URLリンク(kadoppe.com)

自分は読み途中だからてきとうに見つけた感想文でもはっとく。

自分が読んだとこまでの感想としては、
読んだところで悩まずに書けるようにはならないかな。
けど、納期に追われておざなりになるところだし、
読めばちょっと自分で気を使っただけだと、
気を配りきれない要素を拾えるんじゃないかなと思っている。
あくまでリーダブルコード。設計については書いてないよ。

177:nobodyさん
14/03/31 23:45:02.75
ストアドプロシージャとか実行するにはどうすれば良いの?

178:nobodyさん
14/04/01 00:05:45.77
>>175-176
Cakeの場合、ある程度の決まり事があるのでだいぶ楽なのですが、
やはり、自分で納得行かないコードのまま進むことがあります。
かといって、他人のコード見ても分かりやすいとは思わないし。
(有名所のOSSのソースしか見てませんが

とりあえず質問した件は、inquiry_repliesにしてみます。

179:nobodyさん
14/04/01 00:36:15.98
>>177
ベタ書きして Model::query()


すまん、本当は俺もよく分からん

180:nobodyさん
14/04/01 00:50:20.63 lnxBtai1
うんごぶりぶりんこ!!!!ドビュビュビュビュドバババババブッ!!!
ドリュルリュルウリュリィブブブブブブッッ!!!!あへあへうんこまん!!!ぶりっちょ!!!
ケツの穴からドババババババババッバwwwwwwwwwwwwWWWW
wwwwwwwwwwww
WWWwwwwwwwwwww??? ? ? ? ? ? ? ?????     ????????wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
なお、まにあわんもよう

181:nobodyさん
14/04/01 07:10:33.33
只働きだろうと持ち出しだろうと、働かなきゃ空白期間だよ
それをちゃんと理解しているなら浪人生活なり語学留学なり存分に楽しんだらいい

182:nobodyさん
14/04/01 09:58:54.32
なぜこのスレなんだw

183:nobodyさん
14/04/02 05:14:01.71
↓の方法で、ControllerからModelにアクセスすると
public function hoge() {
 $this->loadModel('Hoge');
 $Users = $this->Hoge->find('all');
}

このようなエラーが表示されてしまいます。
Missing Datasource
Error: Datasource class Mysql could not be found.
Datasource is not found in Model/Datasource package.

↓の中には"empty"というファイルしか入っていないのですが、
cakephp\app\Model\Datasource

やはり何かファイルが足りないのでしょうか?

184:nobodyさん
14/04/02 06:25:25.12
>>183
cakephp/lib/Cake/Model/Datasourceにあるっしょ。

Missing Datasourceになる理由は、情報不足でよくわからんけど。

185:nobodyさん
14/04/02 11:09:44.80
フォームヘルパーのnameが
data[Post][test1]
のラジオボタンがあるとします。

idが、PostTest10、PostTest11、PostTest12となってしまうのですが、
これをPostTest1_0、PostTest1_1、PostTest1_2
みたいにする事って出来ないのでしょうか?

186:nobodyさん
14/04/02 13:11:18.07
2、3人での小規模開発では使う必要無いですよね?自分でライブラリ作った方が

187:nobodyさん
14/04/02 13:32:26.95
1人だけどCake使ってるよ。
自分でも作れるけど、車輪の再発明みたいな感じで面倒だし。

188:nobodyさん
14/04/02 13:53:48.92
必要かと聞かれればその人次第だけど、
1人でも3人でもCakePHP使うよ。
3人のうち2人がほかのフレームワークに慣れてるなら、それに合わせるけど。

189:nobodyさん
14/04/02 15:43:50.23
>>187
色んなもの開発して行くうちにそれなりにライブラリは出来て行くから再発明にはならないでしょ
自分で同コストで出来ることをフレームワーク習得にさらに時間費やすならその理由が無いと

少人数小規模すぎると効率化のメリットよりも、処理の重さや習得の手間、細かい所に手を入れ出すと途端にコストが増す、無駄にシステムが大きくなるとかのデメリットのが目立つよね

190:nobodyさん
14/04/02 16:12:41.55
>>185
自動で振られるIDは制御不可能です。
FormHelper をオーバーライドしてカスタマイズするしか無い。
個別に指定するなら第二引数のidキーで指定できます。

191:nobodyさん
14/04/02 16:16:36.30
>>189
Zendみたいなライブラリの寄せ集め的なFWだと
他のプロダクトでも流用できたりするけど、
CakePHPとかはFWに拘束されてしまうからな。
もっと結合度の低い構成にしてほしいとは思う。

192:nobodyさん
14/04/02 16:21:34.23
>>186
人数は関係ないと思うよ
理解程度と何を作るかによる

一部分しか使わないときにはCakeは使わないな

193:nobodyさん
14/04/02 17:26:18.77
>>189
後半2行はCakeだろうとオレオレだろうと一緒じゃね?
開発人数や規模が変われば冗長化するのは当然じゃん。
なら、みんなで共有・共通事項で合わせられる、
Cakeのような既存のFW使うほうが、よっぽど効率がいい

194:nobodyさん
14/04/02 17:33:22.17
ファイル数個で済むようなちょっとしたアプリなのにcake使ったら、久々にソース読んだ時とかに絶対無駄に分かりづらくなる

195:nobodyさん
14/04/02 18:00:04.95
全くのPHP初心者がCakeはじめるならそうなるだろうけど、
経験者ならFW使う前に自作ライブラリ作ってるだろうし、
ファイル数個で済む程度のアプリなら、それ使えば良いと思うが。

196:nobodyさん
14/04/02 21:01:45.37
少人数だからとオレオレでやってたとこに途中参加する人のことを考えてあげてください。
CakePHPは完璧でもないし、すこし合わないプロジェクトな事もあるけど、
CakePHPであると言うだけで、それに慣れてる人を探すことができるよ。
オレオレに慣れてる人は、今いるメンバーだけだよ。

本当にちょっとしたものなら、自作ライブラリでもいいけど、
今ならComposerでライブラリとってきて、必要なとこだけ自分で書くのがいいと思うよ。

197:nobodyさん
14/04/02 21:31:51.71
cake使っててテーブルの値勝手に全部消去された事あるんだけど
あれなんなの仕様?

198:nobodyさん
14/04/02 21:37:35.82
cakeは遅いからな。下手なものには使えない

199:nobodyさん
14/04/02 22:21:06.03
>>184
あ、そっちにおいてあるんですね。
Datasource class Mysql could not be found.
って書いてあるから、てっきりファイルが何か足りないのでは?と思っていました。
もう少しソースを見なおしてみます。

>>186
1人だけど使ってます。MVCを楽にやりたかったから。

200:nobodyさん
14/04/02 22:34:26.36
>>197
それだけじゃ分からん

多対多のリレーションテーブルの属性値が消されたとか?

201:nobodyさん
14/04/03 00:25:42.94
>>198
これよく分かんない。
CakePHPがボトルネックになって要求満たせなかったことが無いんだよねぇ。

202:nobodyさん
14/04/03 00:46:56.03
>>201
お前の会社がオーバースペックのサーバ納品してボッてるだけだろ

203:nobodyさん
14/04/03 02:21:11.20
>>202
サーバー安いしねぇ。
運用コストも含めて、要求以内だよ。
チューニングの余地は、アプリケーションのコードにもインフラ構成にも、普通に残ってると思うけど。
サーバー代が1割2割減ったところでたいした額じゃない。
それより、開発・保守開発が効率よくできるほうが、開発費がかからなくてありがたいね。

204:nobodyさん
14/04/03 08:59:09.29
cakeは開発工数の少なさ、技術者の安さはトップクラスだから開発費は安いんだよな。
前も上がってたけど、ソーシャル系は厳しいな。用途次第ってことだ。
ボトルネックの経験がないところには発注するのは怖いな。ネックになった時に投げ出される可能性が高いってことだろ?

205:nobodyさん
14/04/03 10:11:20.11
なのに、市場ではボトルネックを一切無視して、価格競争してるからな

206:nobodyさん
14/04/03 14:48:37.49
それでいいんじゃね。
パフォーマンスとかうるさく言うんなら、FWやORMはおろか動的言語使うこと自体が要件に合ってないだろ。

207:nobodyさん
14/04/03 15:13:32.96
>>203
インフラ代がいくらのレンジの話よ?

208:nobodyさん
14/04/03 15:28:38.04
1000円以下

209:nobodyさん
14/04/03 16:46:48.77
>>204
ボトルネックの経験って?

210:nobodyさん
14/04/03 19:56:07.66
>>197
俺も前なった
1.3のいくつかの時までのバグだったから
今はもう起きないんじゃないか?

211:nobodyさん
14/04/03 20:11:13.79
関係ない話で申し訳ないが、
2ch乗っとられたってマジらしいな

2chドットsc に移行するらしいが、
'2ch' . '.sc' ってのをNGワードにしているらしい

212:nobodyさん
14/04/03 23:37:19.01
>>207
数万~数十万/月
ってところだね。

213:nobodyさん
14/04/03 23:41:04.71
どれどれと思ってやってみたら

ERROR:さくらが咲いてますよ。

ってなって書き込みできんかった。
どうでもよかったけど、サーバー側でNGワードとかされると引くわ・・・

214:nobodyさん
14/04/04 15:29:28.73
>>212
人件費込み?

215:nobodyさん
14/04/04 19:02:20.90
そうだよ

216:nobodyさん
14/04/05 00:43:47.97
>>214
人件費は入ってないよ。
インフラが得意でインフラ方面のタスクをよくやってる人はいるけど、
インフラだけやってるって人はいないからね。
ただ、自分たちで何でもやらないとなものもあれば、
ある程度は作業を依頼できるインフラ屋さんに頼んでるのもあったから、
そういう場合は一部入ってると言えるかもしれない。

217:nobodyさん
14/04/05 16:20:54.14
>>214
数万で込とかw

218:nobodyさん
14/04/05 23:26:04.89
開発費は人件費だから
込みじゃないと比較できんな

219:nobodyさん
14/04/06 01:43:29.71 Iec7CVL5
Cake3 触った人いる?

さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。

これ Cake2 から移行するのって最初から作るのと同じぐらい大変かもしれないな。

というか、それ以上に苦労するかもしれないな。

220:nobodyさん
14/04/06 03:31:19.46
>>218


221:nobodyさん
14/04/06 04:05:49.26
>>219
> さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。
やっとあるべき姿になったという感じだよね
元々Railsにインスパイアされてできたはずなのに、配列で返ってくるところは絶対変だったよな
まぁ、PHP4に引きずられたんだろうけど…

222:nobodyさん
14/04/06 10:13:55.10
人件費込みのインフラ費が
一人月超えてくると
開発費との比較が必要になってくるな

それまではcakephpで悩まんな

223:nobodyさん
14/04/06 20:45:00.75
今日は寒いな
まだストーブが要るとは思わんかった、灯油がもうないよ…

224:nobodyさん
14/04/07 10:47:00.11
フォームのidを手動でCake式に変換する方法(関数)ってありますか?
test_hogeというnameならTestHogeにするみたいな

225:nobodyさん
14/04/07 18:57:19.67 LGjnvRjr
>>224
FormHelper::domId()

226:nobodyさん
14/04/07 19:46:25.07
>>225
思い通り出来ました!ありがとうございました。

227:nobodyさん
14/04/08 11:37:39.61
チェックボックスを使ったバリデーションで質問です。
ルールを以下のようにしているのですが、
'rule' => array('multiple')
チェックボックの値に0がある場合、1つ選択しただけではfalseになります。
0という値を許可するには、独自バリデーションを作る必要があるのでしょうか?

228:nobodyさん
14/04/08 14:29:13.60 DFrq8Phr
>>227
Validation::multiple() を見たら、

$check = array_filter((array)$check);
if (empty($check)) { return false; }

ってなってるから、ここで弾かれちゃうんだね。
フィールドの値を変更するか、自作するしか無いね。

コールバック渡せるように作ってくれれば良いのになぁ。
Cakeは、この辺の中途半端な不自由さが結構あるんだよな。

229:nobodyさん
14/04/08 14:55:21.04
>>228
わかりました。自作します。

半角英数字のチェックを配列対応してなかったり、
確かに不自由さは多いですね。

230:nobodyさん
14/04/08 22:23:04.86
>>229
checkboxは他のtypeと違って1個もチェックしないと、空文字列すら送らないんだよね。
なのでFormHelperでチェックボックスを生成した場合、hidden value="0"がチェックボックスと一緒に用意される。
だからバリデーションもそれにあわせて、0は真偽でいうと偽の値になってるんだ。
オレオレフレームワークからCakePHPに乗り換えたときは、そういうところに押し付けがましさを感じていたけど、
慣れてしまえばまぁ合理的かなと思うよ。
チェックボックスをDBにあるマスターテーブルから生成するような場合(割とよくあると思う)、
valueはそのテーブルのidにするのが自然だし、idは1から始まるのが基本的だからね。

なので、CakePHPで開発していくなら、バリデーションを自作するより、
チェックボックスのvalue="0"は未選択とするように、変更するのをお勧めするよ。

231:nobodyさん
14/04/09 10:48:16.40
バリデーションで便乗質問ですが、
名前の姓・名のように、1つの項目で2つの入力箇所がある場合、
バリデーションはどうすればいいのでしょうか?

フォームのnameが
姓:data[User][name][sei]
名:data[User][name][,mei]

として、これ自体のバリデーションは独自関数を作れば出来ますが、
個別にエラーを出力することって出来ませんよね?
例えば「姓が未入力です」「名を日本語で入力してください」
とか出力したいのですが、validateのルール指定では
名前(name)に対する指定で、その下の連想配列に対する
姓(sei)や名(mei)には指定できないです。

232:nobodyさん
14/04/09 11:56:22.61
cakeでも2.4.7でauthコンポーネント利用して認証入れてますが、
f5連打でセッション切れ起こしませんか?
ググって調べてでてきた情報で

Config/core.php最下部に

Configure::write('Security.cookie', 'cakephpfdebackend');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'low');

を追記してますが効果無し。
IE、FireFox、Chrome全てでセッション切れます。
2.3時代からcomposerでアップデートして現在最新ですが
2.3時代でも起きていたように思います。

開発途上段階でaclを入れようと、
alaxos/aclプラグインを導入しましたが、
設定画面で全てのアクションに対するRoleごとの権限をajaxで取りにいく部分があって、
既存のアクションが50はあるので、Role3つ*50で150回のajaxリクエストが走りますが
この途中で確実にセッション切れを起こしてしまい、困ってます。
セッション切れが起こるタイミングはまちまちで、リクエスト回数によるものではなさそうです。
$this->Auth->allow()を置いて認証を使わないようにしないと設定できない状況です。

何か手がかりになりそうな情報はないでしょうか?

233:nobodyさん
14/04/09 12:49:01.33
>>231
バリデーションもだけど、その構造だとsave()できなくないか?

姓:data[User][sei]
名:data[User][mei]

どういうテーブルスキーマか知らんけど、普通にこれでいいんじゃないの?

234:nobodyさん
14/04/09 13:22:45.53
>>233
beforeSaveで1つのnameにするので大丈夫かと思います。

単純にsei、meiを分ける方法が一番簡単だと思うのですが、
日付のフォームとか、Cakeは連想配列で管理しているので
同じように[name][sei]と出来れば良いなと思っています。

235:nobodyさん
14/04/09 21:52:21.95
>>232
どう?
URLリンク(www.matomater.com)

236:nobodyさん
14/04/10 06:44:41.50
>>234
でも日付って、年月日で別個にバリデーションできたっけ?
日付としてひとまとまりだったような気がしたけど。
日付はそのままsave()出来るような気がしたけど、これって特殊だよね。
日付で出来る事だからといっても、その辺CakePHP内であまり汎化されてないような気がする。

まぁdata[User][name][sei] でポストするのはうまくいくとしたとしても、
バリデーションはすっきりとは行かないんじゃないか?

237:nobodyさん
14/04/10 09:24:25.58
>>236
確かにそうですね。
それに年月日の場合、個別にバリデーションする必要無い気もします。
単に「日付が正しくありません」というメッセージを出せば
年が抜けてるのか月が抜けているのか関係無いような。

でも、この辺がもう少し柔軟性あればいいですよね
やっぱりフォーム側を[name_sei]のように変えるしか無いんですかね・・・

238:nobodyさん
14/04/10 10:57:39.51 ekNccxsF
>>237
バリデーションしてから beforeSave 出来るわけだから、
スキーマを name にして、ルールを sei, mei の2つにする。
んで、 beforeSave で値を結合すれば良いんじゃない?

ただ、バーチャルフィールドを使わない理由は?
name を1フィールドにしなくてはならない要件があるの?

239:nobodyさん
14/04/10 11:10:48.64 ekNccxsF
え、dateフィールド見たいにフォームで name の下に作ってるのか!

>>236 の言うように date や datetime は
Model で各要素を個別に扱えるようには作られてない。

240:nobodyさん
14/04/10 11:12:27.99
あ、 何も考えずに age てた。sage にした方が良かったんかな

241:nobodyさん
14/04/10 12:41:05.32
>>235
情報ありがとうございます。
if(!isset($_SESSION)) session_start();
を試したところ、セッションは切れないのですが
CAKEのセッション機構の設定が全部死んでしまいました。
これで解決させるとまずそうです。

最初からやっとけという話ですが、
CakeSessionを追ってみたところ、Session.autoRegenerateがtrueの場合
ある一定数のリクエストがあるごとにセッションIDを変更しており、
その変更のタイミングで同時リクエストが走ると
そこからセッション切れが発生する事がわかり、
autoRegenerateをfalseにして解決しました。

242:nobodyさん
14/04/10 14:11:17.70
Cakeのセッション周りは昔から謎の挙動をするよな
詳細は忘れてしまったけど、要注意だ

243:nobodyさん
14/04/10 14:21:07.20
そういうのがあるからフレームワークは怖い
Strutsみたいのだとまた違うけれど

244:nobodyさん
14/04/10 14:33:01.94
>>237
FormHelperのコードを見るとわかるけど、バリデーションのエラーメッセージの表示は、
Modelname.fieldname という構成を想定してるよ。
バリデートルールはModelに書くから、Controllerが保持する$validationErrorsも、
[Modelname][fieldname]という2次元配列で格納されている。

$this->Form->input('Modelname.fieldname') で、その$validationErrorsの中身と対になるようになってる。

例外でモデル名を省略できるケースはいくつかある。
$this->Form->create('Modelname');
$this->Form->input('fieldname');

Controllerのusesが1個の場合と、複数ある場合1個目のモデル、usesを書かずコントローラー名からモデル名がわかる場合は、
$this->Form->create();
$this->Form->input('fieldname');
でもいけたような気がする。たぶん

245:nobodyさん
14/04/10 14:37:55.60
Cakeで一番困ったのは>>197のバグでテーブル全部消されたこと

246:nobodyさん
14/04/10 15:58:45.85
てか、そんなこと1回もなったことないけど、
ほんとにそんなバグあるの?

247:nobodyさん
14/04/10 16:11:15.52
bakeしてんだけどviewだけが何故か生成されない
Cake2.3.5で、Windowsのコマンドプロンプトからbakeしてます

cake bake view テーブル名 を実行しても

Welcome to CakePHP v2.3.5 Console
---------------------------------------------------------------
App : app
Path: appのパス
---------------------------------------------------------------

と出るだけで終了して何も起きない

インタラクティブでやると

Would you like to create the views for admin routing? (y/n)
[n] >

の後で終了して、何も起きない

248:nobodyさん
14/04/10 16:11:16.67
本当なら使用しているバージョン、どんなコードで再現したかなど
詳細を書いてほしいものだ
レスがなければ嘘だと判断していいと思う

249:nobodyさん
14/04/10 16:13:07.05
>>246
WHERE 1=1 でDELETE発行するバグが1.3.4まであった
URLリンク(web.archive.org)
ググれば過去スレも出てくるよ、12ホール目

250:nobodyさん
14/04/10 18:03:59.14
興味あったんで本当にテーブル削除されることがあるのか試してみた
以下のコードをコントローラのアクションに入れて実行
$this->テーブル->delete();

バージョン 1.3.2 1.2.8 1.2.0 のいずれも発生しなかった
>>249の提示した記事は英語なのであまり深くは読めていないが
ライブラリのmodel.phpを修正して$model->exists()をコメントアウトしてみたところ、
一応再現はできた

まとめると
①モデルのexistsメソッドをidが指定されていなくてもtrueを返すように上書き
②モデルのdeleteメソッドを引数なしで実行
したときに DELETE FROM `テーブル` WHERE 1 = 1
が実行される(もちろん全テーブルじゃなくて1テーブルだけだが)
まあほとんどの人には縁のない現象といえるかな
もっと単純に再現できるコードがあるのなら提示してほしい

251:nobodyさん
14/04/10 18:47:46.61
beforeDeleteはどこいった

252:nobodyさん
14/04/10 19:06:10.92
普通に使ってるだけで起きたんだよなあ。
古いことなので今更調べる気にはなれない。

253:nobodyさん
14/04/10 20:45:55.49
なるほどね、よくわかった
オラクルとかのトリガーでも自テーブルへの処理は参照すらできないから
記事のbeforeDeleteのような実装は単なるコーディングミスと判断していたよ
普通の処理とみなす人もいるってことね

254:nobodyさん
14/04/10 20:58:33.13
Cakeに限らずだが、FMって問題が起きた時に
その原因を突き止めるのに苦慮することが多いよね

255:nobodyさん
14/04/10 21:09:13.27
そんなことよりbakeできなくて困ってるんですが

256:nobodyさん
14/04/10 21:58:13.10
FMってなんだ

257:nobodyさん
14/04/11 21:38:10.95
フォームヘルパーの月(month)とday(day)って
どうして「01」と「1」に分かれているんですかね?
値はどちらも0が入っているのに

258:nobodyさん
14/04/15 08:59:05.93 eAedbEAo
バリデーションルールで「url」を使うと、日本語が通らない?
そういうもんなの?使えねーじゃん

259:nobodyさん
14/04/15 12:13:57.73
ちょっとハマったので情報投稿します。

2系(たぶん2.3~)でCookieコンポーネントを使って
ユーザーデータ等を保存する場合、
$this->Cookie->write('Auth.User', $this->request->data['User']);
みたいにすると、
$this->Cookie->delete('Auth.User');
で削除できません。ログアウトの時にこれを入れても削除されません。

$this->Cookie->write('AuthUser'); で保存して
$this->Cookie->delete('AuthUser'); で削除はOKでした。
どうやらドット記法が原因のようです。

ログインフォームの自動ログインで上記のような書き方を
推奨しているサイトがちらほらあったので、注意してください。

ログインフォーム以外も何かしらCookieコンポーネントを
使うケースがあるかと思いますが、
出来るだけCookie名にドットを入れないほうが良いみたいです。

260:nobodyさん
14/04/15 14:27:17.30
>>258
そもそもURL中のマルチバイトはURLエンコードしないとRFC的にだめなんじゃない?
違ったっけ?

261:nobodyさん
14/04/15 15:56:03.67
>>258
ためしてみたけど普通に使えたよ
使ったバージョンは2.4.6
App::uses('Validation', 'Utility');
debug(Validation::url('http://ほげ.com/漢字.htm'));
結果はtrue

262:nobodyさん
14/04/15 17:25:40.94 eAedbEAo
まじ?こっちは2.3.8でダメだった
バージョン上げてみようかな

263:nobodyさん
14/04/15 18:29:39.18
$this->User->id = $id;
$user = $this->User->read();

みたいな書き方って、あんまりやらない方が良いみたいだね。
この後にsave(更新)したら、request->dataに無いカラムも更新しようとして
空更新されて焦ったわ

264:nobodyさん
14/04/15 23:31:53.92
>>263
readなんて使ったことないなー。

265:nobodyさん
14/04/16 13:37:09.77
Shellファイルをブラウザ上から確認する方法って無いですかね?
いちいちサーバにアップしてSSHからコマンド実行して~
というのが面倒に感じまして。簡単に実行確認出来る方法があれば教えて下さい。

266:nobodyさん
14/04/16 15:23:58.68
>>265
できるけど、結構大変だろうなと予測。
というかそもそも設計がおかしんじゃない?
Shellでもブラウザでも呼び出せるタスクを切り離すべきだと思う。

267:nobodyさん
14/04/16 15:28:42.31
>>266
Shell内でコントローラを読み込んでアクションを実行できるんですね。
それならブラウザ上でも確認できるので問題なさそうです。

268:nobodyさん
14/04/16 16:33:30.72
>>267
え、何でそういう方向に行くの?
まぁ、好きにすればいいけど

269:nobodyさん
14/04/16 18:28:16.11
>>268
すまん。何が言いたいか分からん

270:nobodyさん
14/04/16 19:41:36.54
>>266は設計がおかしいんじゃないかとか質問内容からは読み取れないことを
書いているうえに肝心の実現方法を書いていないので不適切な回答だと思うが
>>267の結論はもっと意味不明で全く>>266と噛み合っていないので
>>268で呆れられてしまったということだろう

たぶん>>266が「できる」と書いたのは
execやpopenでcake.shやcake.batを呼び出すことじゃないかと予想してみる
OS依存なので個人的にはお勧めできないが

Shellとコントローラの両方から「標準で」使えるものはモデルだけだと思うよ
コントローラやコンポーネントやヘルパーなどをnewして使うようなやり方は
動作はするかもしれないが正しいやり方とは思えないな

271:nobodyさん
14/04/16 20:07:27.22
横だけど、正しい・正しくないは関係ないと思うけどな。
「正しい書き方ではないけど動作する」なら、それでいいんじゃないか?

こんな事言うといつも「複数で開発する場合は迷惑だ」とか言う奴いるけど、
目的は「動作する」事であり、綺麗なソースを書くことじゃない。

それに複数人で開発するなら
「良い書き方がわからなかったから、この方法にした」
って説明すればいいだけだろ。情報共有しろよ。

272:nobodyさん
14/04/16 20:14:11.37
小難しい話は置いといて、 >>265
Shell で呼び出す処理を別の Model だか Lib のクラスに移して、
ShellからもControllerからも実行できるようにすれば良い

273:nobodyさん
14/04/16 20:39:15.00
Shell使う処理で、Modelだけで済む事って無いと思うんだけどなぁ
よくあるメール一斉送信とかShellで作るけど、
その時の条件分岐やらModelに対する指示なんかはControllerに書くわけで。
メールの送信自体はライブラリ化しても良いと思うけど。

274:nobodyさん
14/04/16 22:05:21.32
テストのためにそういうのが出来ないかって話なんだから正しい必要はないだろ
それができるとテストが便利で実装が楽でバグが減るんだっていうんだから

設計だとか綺麗かどうかとか関係ないだろ

275:nobodyさん
14/04/16 23:00:28.05
いつからテストの話になったんだ

276:nobodyさん
14/04/17 00:07:52.39
テスト機能の事じゃなくて、「試す」って意味の「テスト」じゃないか?

277:nobodyさん
14/04/17 00:13:59.42 SXCfNI/g
大規模なシステムになった場合、PHPデバッガー等を使って
1行ずつステップデバッグ実行をした方が効率が良いものなのでしょうか?

cakePHPとかみたいなFWを使っている場合には
デバッガーがそこまで追い切れるのか若干気になります。

皆さんは、PHPで業務システムを作る時にはデバッガーを使っていますか?
それとも dumpで開発していますか?

278:nobodyさん
14/04/17 00:19:14.66
>>277
人海戦術に頼る。クラウドソーシングとかで安く依頼できるしな。
やっぱ、システムだけで対応しようとすると、何かと抜けが出るよ。

279:nobodyさん
14/04/17 00:26:59.39
自分はeclipseとXdebugを使ってステップ実行できる環境を使ってるよ
ステップ実行といってもすべての行を1行ずつ実行する必要はなくて
処理を追いたいところにブレークポイントをつけておけばいいだけ
ステップ実行するまでもない場合はdebug関数で変数の中身を画面で確認してる

>>261
2.3.8で試してみたらfalseになったんでバージョンが原因みたいだね

>>263
自分もreadは使ったことなかったんで試してみたところ、再現を確認
なかなか嫌な動きだわ

280:nobodyさん
14/04/17 02:16:53.26
スレチだが、新しい方に移動した方がいいの?

281:nobodyさん
14/04/17 06:59:31.54 +GQ/cWTu
CakePHPで複合主キーで構成されるテーブル同士の結合は
どのように実現すればよいのでしょうか?

[テーブル左] 列A*、列B*、列D*、列E*
[テーブル右] 列A*、列B*、列C
 (*は主キー)

のような構成で、
[テーブル左] に [テーブル右] を 列A、列Bをキーとして
列C を外部結合したいと考えています。
$virtualFields で1つにまとめて、$primaryKeyで定義しなす?

282:nobodyさん
14/04/17 09:07:56.95
>>277
デバッカ使ってる

エクステンションでなければ中まで追えるので、cakeも追えるよ

283:nobodyさん
14/04/17 12:22:28.87
特性スープやでぇ

284:nobodyさん
14/04/17 12:35:55.72
特性スープやでぇ

285:nobodyさん
14/04/17 14:12:21.40
>>281

'joins' キーでちまちま作りこんだほうが良い。
というか、以前調べたときはそれしか無理だった。
他に方法あれば教えて欲しい。

Cake3 から複合キー対応らしいけどね。

286:nobodyさん
14/04/17 23:16:01.90
ツリービヘイビアを使ったカテゴリで、
親カテゴリから子カテゴリまで何階層あるか調べる方法って無いですかね?
無限にカテゴリを作れるのではなく、ある程度階層指定したいと思います。
簡単に表示する方法があるなら、エラー判定しやすいのですが

287:nobodyさん
14/04/17 23:45:58.91
親要素の条件は、子エンティティと比較して
lft がより小さく且つrghtがより大きいので
子エンティティを $child、モデルのエイリアスを Foo 、階層を $depth とする場合
こんな風にしたら取れるはず

$childLft = $child['Foo']['lft'];
$childRght = $child['Foo']['rght'];
$conditions = array('Foo.lft <' => $childLft, 'Foo.rght >' => $childRght);
$depth = $Foo->find('count', compact('conditions')); // 親の階層数

288:nobodyさん
14/04/18 05:19:37.24
>>285
ありがとうございます
Cake3で対応ですか!期待して待ってます

289:286
14/04/18 10:55:29.76
>>287
以下の様な階層だとして
テスト→子テスト→孫カテゴリ

287さんの方法では、「子テスト」を選ぶと1と表示され、
「孫テスト」を選ぶと2が表示されるなど、1つ上の階層番号しか表示されません。

290:286
14/04/18 10:56:34.64
すみません。2行目を書き間違えました。

テスト→子テスト→孫カテゴリ
ではなく
テスト→子テスト→孫テスト
でした。

291:nobodyさん
14/04/18 13:04:19.06 N7yuefiZ
Cakeをインストールすると最初の画面でSecurity.saltとcipherSeedを変更する様に言われるけど、これは何桁でもいいの?

292:nobodyさん
14/04/18 13:22:10.90
いいよ

293:nobodyさん
14/04/18 13:39:34.12 N7yuefiZ
そうか、ありがとう

294:nobodyさん
14/04/18 13:45:58.83
>>290
じゃぁ1足せよw
「親の階層数」って書いてるじゃん

295:nobodyさん
14/04/19 16:38:03.71 2kVxcvEH
Cake人気ないな…
とうとうCakePHP bake なんたら でぐぐると食べ物のケーキの記事ばかり出てくるようになってしまった

296:nobodyさん
14/04/19 17:11:08.54
ねぇよ

297:nobodyさん
14/04/19 20:27:05.90
Cakeは海外で特に人気ないからな

298:nobodyさん
14/04/19 20:37:49.07
え、国内の方がないと思ってた

299:nobodyさん
14/04/19 20:39:03.09
PHPは日本で特に人気ないけどな

300:nobodyさん
14/04/19 20:57:23.19 2kVxcvEH
そうか?PHPの仕事しか来たことないわ。Rubyとかどこで使ってるの?って感じ

301:nobodyさん
14/04/19 21:42:49.70
>とうとうCakePHP bake なんたら でぐぐると食べ物のケーキの記事ばかり出てくるようになってしまった

どこの検索エンジンだよそれw

302:nobodyさん
14/04/20 01:46:02.06
人気っていうか、すごい使われるけど評価は低いよね。
よく叩かれてる

303:nobodyさん
14/04/20 09:30:13.88
PHPは日本でも使われてるんだが
やっぱり、Ruby、Perlの使われ方度合いに比べると
全然使われてないことになる

304:nobodyさん
14/04/20 09:57:55.62
ruby使ったことないけど、phpとさほど変わらんのでしょ?
最終的には好みの問題みたい。

305:nobodyさん
14/04/20 10:42:30.47
どこが変わらないって言ってるかはわからんが

RailsとCakeの今が、いい意味でも悪い意味でもRubyとPHPの差の一つ

306:nobodyさん
14/04/20 11:18:10.27
利用者が増えるに従ってアンチが増加するのは何でも一緒。
FWは型を提供するものだから、その型が気に入らなければ別のを使うしか無い。
無ければ作るか自分を合わせるしか無い。

明確な問題点があるんだったら、コミュニティに参加して改善を提案してみたことはあるのかな?
他を調査してより良い解決策があるんなら、具体的にその利点をここの読者に教えてあげようとしないのかな?

まぁ、自分一人で決めることも出来ないから、愚痴を言いたくなる気持ちもわかる。

307:nobodyさん
14/04/20 11:24:53.22
>>303
え?
Perlは人口減って、昔から使ってた一部の会社が使ってるばかりだし、
Rubyは最近ようやく増えてきたかなって程度だろ。

308:nobodyさん
14/04/20 11:30:03.25
>>307
海外での人気に比べるとな

309:nobodyさん
14/04/20 12:34:02.33
正直サーバーサイドはFWが何でもいいわ

310:nobodyさん
14/04/20 12:38:12.89
ガラパゴス言語
Perl,Ruby

ガラパゴスFW
CakePHP

って言いたいのか

実際そうだけどな

311:nobodyさん
14/04/20 14:23:15.37
世界的なシェアだと最近はLaravelが一番なんだっけ?
(シェアじゃなくてGitHubの人気だったか?)
あと、YiiとかCIもCakePHPよりは上なんだよな確か。

でもオープンソースだからといってもシェアに関してはプロプライエタリと同じで、
必ずしも良い物が普及するとは限らないよな。

たとえばWordPressみたいに、酷いシロモノでも
マーケティングが勝利するオープンソースもあるし。

312:nobodyさん
14/04/20 15:51:49.84
rubyはネットでは見るけど、現場では全然見ない

313:nobodyさん
14/04/20 17:08:13.64
Yiiは共産圏で人気らしいね

314:nobodyさん
14/04/20 18:32:52.08
>>312
織田裕二みたいですね

315:nobodyさん
14/04/21 09:50:09.63
Rubyって単に取り上げてるブログが目につく(ブクマなどで)だけで
多いと錯覚しているだけだろ?

そら、PHPみたいに成熟された言語より
Rubyのような比較的新しくてそれほど一般化していない
技術のほうが注目を浴びるに決まってるわw
それと混同して「PHPは人気なくなった」とか目論見が甘すぎ

316:nobodyさん
14/04/21 15:57:26.42
RubyもPHPと同時期に出来た言語なんだが

317:nobodyさん
14/04/21 18:53:01.40
ScalaとGoが注目浴びてるな

318:nobodyさん
14/04/25 10:49:57.10
リファラをコントローラーとアクションに分解する機能ってありませんよね?
$this->referer()だと普通にリファラが表示されるだkです。

319:nobodyさん
14/04/25 13:39:29.24 s6GwqSqm
CakeRequest にそれっぽい機能あった気がする

320:nobodyさん
14/04/25 15:10:13.57
Routerクラスがそれを担当している気がする

何を作ろうとしてるのか知らないけど、
リファラを使って何かをする機能ってだけで、ちょっと不穏な空気を感じてしまう。

321:318
14/04/25 16:51:30.47
>>320
管理画面なのですが、例えば削除(delete)する場所って
一覧(index)と詳細(detail)で出来るとします。
削除した後に全部一覧に戻せば良いだけかもしれませんが、
改ページした後に削除した場合、リファラで前の画面に戻したいのです。

つまり、要件として
・一覧から削除 → 前のページにリダイレクト
・詳細から削除 → 一覧にリダイレクト

となります。これをするために、リファラを分析して
「どこのページからのアクセスか?」がわかれば簡単と思い、質問しました。

322:nobodyさん
14/04/25 17:39:22.10
削除なら GET じゃなくて FormHelper::postLink() を使うのが今の標準だと思うんだけど、
その場合なら引数にリダイレクト変数をセットできる。

コントローラ側で汎用的な処理をしたいんならやっぱりリファラでやったほうが良いのかも。

URLの解析は >>320 の言ってる通りRouter::parse()メソッドがある。
ただ、リファラをそのまま渡してもダメで、
アプリケーションのルートからのパスにする必要があったかもしれない。

323:nobodyさん
14/04/27 13:54:25.75
海外の求人ちょっと見たらRailsが多くて驚いた
PHPばっかりの日本はガラパゴスなんかな

324:nobodyさん
14/04/27 15:43:07.45
rails多いといっても
phpのほうがrubyよりは一応多いでしょ

rubyの9割以上の求人がrailsってのがすごいよな

railsだとpostgresql求人増えてるし
cakephp+mysqlのスペックだとガラパゴスになりそうだな

325:nobodyさん
14/04/27 16:13:12.62
せやかて駆動

326:nobodyさん
14/04/27 17:19:21.88
ん? Cakeスレかここ。 phpの安直さは最高! fuelphp使ってる。 確かにCakeはオワコンだな。

327:nobodyさん
14/04/27 18:49:35.25
どこまでいっても、所詮Railsのパチもんだしな。
Djangoとはえらい違いだ。

328:nobodyさん
14/04/27 20:59:13.46
>>326
fuelphpって既に終わってるやん

329:nobodyさん
14/04/27 21:32:10.25
fuelは結局始まらなかったなぁ

330:nobodyさん
14/04/27 21:46:02.47
>>324
herokuのおかげかrailsはPostgreSQL対応が盛んだからな

331:nobodyさん
14/04/27 23:09:38.66 9dL9KMPJ
少し変化あったけど
結局またMySQLだよな

332:nobodyさん
14/04/28 00:46:19.25
日本は逆にRailsかCakeのどっちかになってる気がする
ま、CakeもRailsのパクリなんであれだが

333:nobodyさん
14/04/29 10:06:00.47 uHAmZpKN
脆弱性の緊急パッチが出てるんで
業務で使っている人は早めに当てておけよー。
1.3.x と 2.4.x 両方。

334:nobodyさん
14/04/29 10:12:45.43
まじか、と思って見に行ったら
公式からしてやられてしまったのか?w
URLリンク(cakephp.org)
502 Bad Gateway

335:nobodyさん
14/04/29 10:46:44.84 uHAmZpKN
公式復旧したっぽいね。
ちなみにこの脆弱性報告したのは実は俺。

336:nobodyさん
14/04/29 11:06:47.62
前から気付いてたので、フォーム改ざん検知使ってなかった。

337:nobodyさん
14/04/29 11:19:04.21
英語読めないんだけど、今回は何が問題なの?

338:336
14/04/29 11:26:35.82
家出ちゃったんで確認できないんだけど、今回の修正、別アクションにpostするときでも大丈夫?

339:nobodyさん
14/04/29 11:32:28.27
>>335
クリタタカシさんありがとうございます

340:nobodyさん
14/04/29 11:35:24.45 uHAmZpKN
>>337
SecurityComponent のフォーム改竄防止機能に穴があった。
作りにもよるけど hidden で受け取る id とかを改竄されると、任意のレコードを更新可能。

Model::save() を呼ぶ時に第一引数の $data に更新したいデータだけを渡すか
第三引数の $fieldList を明示的に指定するかしてれば平気。

>>338
別のアクションでも平気。
FormHelper が作る action をセキュリティトークンに入れてるから。
ただ、JavaScript で動的に action を変更している場合はブラックホールに飲まれるかと。

341:nobodyさん
14/04/29 11:38:39.55 uHAmZpKN
>>339
どういたしまして

342:nobodyさん
14/04/29 11:44:15.83
CakeのSecurityComponentっていっぱい穴ありそう
俺が触ってたのは1.3の頃だけど使いたくないと思った

343:nobodyさん
14/04/29 11:46:59.01
すげえ

344:336
14/04/29 11:48:47.49
>>340
ありがとう。これで自作form改竄対策から離れられる。

345:nobodyさん
14/04/29 16:06:25.97
セキュリティトークンどころかformまで今まで自作してたけど
Cake純正のもの使った方が楽なんかな

346:nobodyさん
14/04/29 17:12:05.84
おまえなんでCakePHP使ってんの?

347:nobodyさん
14/04/29 19:09:18.76
昔はもうちょっと使ってる人多かったんだよ
それでメジャーなのかなぁと思って、手を出した
結構色々これで作っちゃったから、以後ずるずる

348:nobodyさん
14/04/29 20:08:51.90
確実に昔よりは使っている人が多いと思うよ

349:nobodyさん
14/04/29 22:33:23.36
少なくとも俺の観測範囲では減っているな

350:nobodyさん
14/04/30 08:44:08.14
ワンオフ型が減り、量産型が増えたから
環境によっては増えたと思い、環境によっては減ったと思う

351:nobodyさん
14/04/30 13:45:58.87
また、アップデートかw

352:nobodyさん
14/04/30 15:08:14.56
う、本当だ

353:nobodyさん
14/05/01 00:53:29.70
なんでもかんでもhappy to announce ってバカみたいだな

354:nobodyさん
14/05/01 02:19:18.51
まぁ、決まり文句だからしゃーないけど、
文言考えるの面倒くさいんだろうな

355:nobodyさん
14/05/02 00:08:32.26
>> 340

これ本当?diffをちょっとみただけだけど、post先のURLを改竄されても通ってたのが、通らなくなってよりセキュアだねってだけで、hiddenの改ざん検知とか関係なくない?

356:nobodyさん
14/05/02 00:25:59.26
嘘だったらこめん。明日よくみてみる。

357:340
14/05/02 00:35:18.90
>>355
本当だよ。
俺が Mark Story 氏に実際の攻撃手順を書いて送ったのが26日。
アップデートが 2.5.0-RC2 に脆弱性のアナウンスなしで反映されたのが27日。
1.3.18 と 2.4.8 にアナウンスありで反映されたのが29日。
かなり深刻な脆弱性だったからこういう日程になったんだけど、
結果的にはミスがあって 2.4.9 が出ることになった。

必ず攻撃が成功するかはサイトの作り次第だけれど、
仕事で使ってるならアップデートした方がいいよ。

358:nobodyさん
14/05/02 00:43:14.81
>>356
今回の問題は、field改ざん検知のハッシュ値が、別のurlでも使えてしまう問題。

例えばForm->textでfield1,filed2を生成しPOSTされた値を保存するaction1、
Form->textでfield1のみ生成しPOSTされた値を保存するaction2があるとする。

action2でform改ざんを行って手動でfield2を追加しPOSTする場合を考える。

一緒にPOSTされるhash値の不一致でエラーとなるのが本来の仕様。
ただし以前のバージョンだと、form改ざんと併せてhash値をaction1のものを引用すると、
エラーにならずにfiled2を上書きできてしまう。

今回の修正で他のアクションのhash値を引用することができなくなり、本来の仕様を
回避する穴がふさがった。

ちなみにhiddenの改ざんの話は、どういう意図で言ったのか俺もよく関連はわからん。

359:nobodyさん
14/05/02 00:55:27.39
>>355だけど、すまん。意味分かったかも。リリースノート読飛ばしてコミットログしかみてなかった。actionを改ざんすることでSecurtyComponentが丸ごと迂回されるのでhiddenも改ざんできるのね。いや、ソースみてないんでこれも嘘かもしれないけどw

360:340
14/05/02 00:58:57.58
>>359
そういうこと。

361:nobodyさん
14/05/02 15:48:57.61
パンくずリストを作成するHTMLヘルパーって扱いが難しいよね
階層が増えるとビューに余計なコードを書く機会が増える
だからコントローラと独自ヘルパーで何とかしているけど、
手間がかかって仕方がない。

362:nobodyさん
14/05/02 18:24:19.36
cookbookの例にあるようにTreeビヘイビアを使ってLI リストを表示したいのですが、
ビューで表示するときはヘルパーか何か作らないといけないのでしょうか?
以下のようにしたいのですが、generateTreeListでは無理です。

・My Categories
 ・Fun
  ・Sport
   ・Surfing

363:nobodyさん
14/05/02 19:10:49.13
>>362
Treeビヘイビアは不要

Model::find('threaded');
か、
Model::find('all');
したでーたを Hash::nest() で入れ子にする。

364:nobodyさん
14/05/02 20:12:03.57
>>363
すみません、そういう事ではなくて、ビューでの表示です。
ビューで>>362みたいなリスト化して出力するには、
独自のヘルパーを作らなければいけないのか?
他に方法があれば教えてくださいっと言った質問になります。

365:nobodyさん
14/05/02 20:40:21.50
無いよ。

なんでかって言うと、再帰処理したら簡単に表現できるからなぁ。

で、再帰処理するためには入れ子構造に組み直す必要があって、
そのためには >>363 に書いた通りって意味なんだが?

366:nobodyさん
14/05/02 20:42:16.77
とりあえず $Hoge->find('threaded'); で取得したデータをダンプするなりして
よく考えてみ。

367:nobodyさん
14/05/02 21:05:59.69
HtmlHelper::nestedList() ではだめなの?

368:367
14/05/02 21:46:37.32
ごめん。
HtmlHelper::nestedList() に渡すには TreeBehavior だと自力で整形しないと駄目なんだね。
CakeDC の Utils プラグインにある TreeHelper::generate() なら >>362 の要求を満たせる。

369:nobodyさん
14/05/02 21:48:33.85
>>367
HtmlHelper::nestedList() に渡すには
単純な入れ子構造にしておかないとだめ。

Model::find('threaded'); で取得したのはそのまま使えないと思う。

いったん Model::find('all'); で取得したデータを
Hash::extract() で階層を浅くして、それを
Hash::nest(); を使って組み直すなどの手間を掛けないと使えないんじゃないかな。

370:nobodyさん
14/05/02 21:49:26.87
あ、かぶった。すまん。

TreeHelper なんてあるの知らなかった。
一度見てみるわ。

371:nobodyさん
14/05/02 22:02:34.68
いえいえ。
実は俺もわりと最近知った。

372:362
14/05/02 22:29:38.32
>>365-371
皆さんありがとうございます。素直に自作ヘルパー作って
配列を再帰して表示することにします。

373:nobodyさん
14/05/08 16:22:29.68
フィールド名がemail以外の時ってemailバリデーション効かなくない?
サンプルコード漁ったらさらっと書いてあるけど動かない…

374:nobodyさん
14/05/08 17:05:11.16
>>373
$validateの配列の書き方間違ってない?

375:373
14/05/08 17:40:55.81
すまんちゃんと効いてた。これsave時にfalse返すんだな。
他のバリデーションと同様にPOST前にポップアップで教えてくれるかと思ってた。

376:nobodyさん
14/05/08 21:14:06.37
え?そんな機能あったか?

377:373
14/05/08 22:24:36.95
POST前ポップアップってこれのことね。
URLリンク(cdn-ak.f.st-hatena.com)
もしかして俺何か勘違いしてるかな…

378:nobodyさん
14/05/08 22:33:24.56
ブラウザさん

379:nobodyさん
14/05/09 00:28:49.07
ブラウザが出してるやつかな

380:nobodyさん
14/05/09 00:37:04.59
>>378-379
マジかwwChromeww本当にありがとうw

381:nobodyさん
14/05/09 04:21:32.04
HTML5の話題でひとくくりにされてる最近のブラウザの機能やね。
CakePHPもFormHelperがそのための属性を出すようになったりはしてるけど。

382:nobodyさん
14/05/09 10:16:45.79
クライアントバリデーションに任せっきりになってしまって、
悲惨なサイトが続出するような悪寒。

楽だし負荷軽減できるしで、いいことずくめなんだけど。

383:nobodyさん
14/05/09 10:59:15.63
そうだね。悪い奴がいないと助かるんだけどね。

384:nobodyさん
14/05/09 11:01:33.24
Controllerでバリデーションしなくて
Modelに移動するいい傾向になるだけでないかな?

385:nobodyさん
14/05/09 13:43:36.22
いい傾向ってなんだ?

386:nobodyさん
14/05/09 13:51:32.25
Fat Modelのことかと思われ

387:nobodyさん
14/05/09 14:56:57.61
サーバーサイドのバリデーションをしなくていいわけじゃないから、負荷軽減にならなくね?
ちゃんと機能するようにつくれば、無通信でユーザーに間違い見せれて、
使いやすくいフォームにはなると思うけど。

388:nobodyさん
14/05/09 15:49:02.85
ブラウザで弾いておいたらサーバー側での試行回数は減るだろ。
正常系の負荷はもちろん変わらんけど。

389:nobodyさん
14/05/09 18:26:07.60
初心者なんすけど
モデルの使い道がよくわかんないっす。
何から何までコントローラーで処理しちゃってモデルはスッカラカンです。
どなたかモデルの使い道というか便利さを三行で説明しなさい。

390:nobodyさん
14/05/09 18:27:49.70
>>387
HTTPの勉強をもっとしましょう。

391:nobodyさん
14/05/09 18:46:15.86
>>389
俺も初心者だからよく分かってないが、
コントローラはモデルに作ったメソッドを呼ぶだけで、
ざっくりした条件分岐のみにとどめておくと後から非常に見やすい気がする。

392:nobodyさん
14/05/09 20:58:13.09
やりすぎると Very Fat Model になってそれはそれで見難い
バランスというかセンスが問われる部分

393:nobodyさん
14/05/09 21:01:03.07
>>389
単に好みの問題だから好きにすればいいんじゃないかな
モデルはどこからでも使える上にシングルトンっぽくインスタンスが1つだけなので
共通っぽいメソッドやクラスを実装するのにも使える

394:nobodyさん
14/05/09 21:32:58.38
ああそうか、モデルはなんとなくテーブルに紐付くものみたいに思ってたが
ロジック処理だけのモデルがあっても良いよな

395:nobodyさん
14/05/10 01:47:38.21
>モデルはなんとなくテーブルに紐付く

これは常にRORと、その派生のCakePHPに対する批判として挙げられてるね。
本来のModelとは全然違うって、激怒しているブログがあちこちにある。

なお、CakePHP3では大幅に改善されるみたいです。

396:nobodyさん
14/05/10 07:20:47.11
>>388
ああ、まぁそりゃそうか。
といっても、負荷対策が必要な状況では、効果的な対策になるほどは減らないとは思うけど。

397:nobodyさん
14/05/10 10:46:10.10
Cakeはエンティティを入れるのが遅すぎた

398:nobodyさん
14/05/10 10:53:41.99
URLリンク(tech.itandi.co.jp)

1,3は同意できるところだが
2は会社のエンジニアレベルが低いとでも言いたいのか

399:nobodyさん
14/05/10 11:01:56.24
周りがCakePHPはRailsのパクリだっつーから使ってみたら
ActiveRecordの超絶劣化っぷりにびびった

Railsも似非MVC2になりがちだけどCakeはそれ以前に
オブジェクト指向設計に真っ向から喧嘩売ってるレベル

400:nobodyさん
14/05/10 12:53:17.49
そうやって批判する奴って何も具体的な事言えない奴ばかりだよな
実際どのくらいのスキルある奴なんだろう

401:nobodyさん
14/05/10 14:23:07.62
Composerは確かにほかの言語のと比べて使いにくい印象はあるけど、
git submoduleしないとパッケージのバージョンを管理できないなんて、
なに言ってるかわからないレベルなんだが。
そんなことあるんかね?

402:nobodyさん
14/05/10 15:56:06.47
お前らのMVCは間違ってる!ってRails式を散々disるスライドがあったが
ものがちゃんと作れれば別にいいわけで、正しいからどうだってのがよくわからん

403:nobodyさん
14/05/10 17:17:38.04
>>400
DBから取ってきたデータがarrayになってる部分だと思われ
Cake3でようやくオブジェクトになるようだが

404:nobodyさん
14/05/10 17:24:14.35
それよく聞くけど、オブジェクトの方が便利なん?
書き方が変わるだけのような気がするけど

405:nobodyさん
14/05/10 17:30:12.91
Cake3を少し試してみたがEntity使えるだけでも結構変わるね
特にViewがスッキリするのはもちろんだけど今までHelperやControllerに溢れがちだったロジックもEntityクラスに置けるのが結構あるしテストも楽
array+Hash・Setに比べたら開発効率やコードの読みやすさは段違いに上がる


でも2から3への移行は大変そう

406:nobodyさん
14/05/10 17:30:20.29
>>404
Modelのメソッドはすべてstaticです、なんて言ったらJavaやRubyなどのオブジェクト指向に
慣れ親しんだ人たちから見れば、なにそのふざけた設計は?とキレられるレベル

407:nobodyさん
14/05/10 17:37:51.74
オブジェクトじゃないとActiveRecordパターンとは言えないからなぁ

408:nobodyさん
14/05/10 20:22:57.11
arrayになった理由はCake1がPHP4をサポートしていたからだろうな
さすがにPHP4でオブジェクト指向にはできなかった、と

409:nobodyさん
14/05/10 23:47:42.75
PHP4懐かしいな
修飾子やら例外やらオートローダーが無いとか
参照渡ししないとクローンになるとかいろいろあるが
ActiveRecordの足かせになりそうな制約はないな

410:nobodyさん
14/05/11 13:33:38.34
最近、嫌static厨が多くて困る

411:nobodyさん
14/05/11 13:37:57.50
static に出来るものはそのほうが良いのにね。
見極めができないんかもな。

412:nobodyさん
14/05/11 15:03:25.90
「全部static」はさすがに嫌われて当然

413:nobodyさん
14/05/11 15:07:39.63
さすがにそんなヤツはおらんやろ

414:nobodyさん
14/05/11 15:08:05.37
staticとかpublicとか分別するとどんなメリットがあるの?もうおっさんだから、今だにわからない。
function hoge を _hogeにする時はあるけど。

どなたかご親切な人
わかりやすく教えてくれませんか?

415:nobodyさん
14/05/11 15:18:12.11
>>413
CakeのModelはまさに「全部static」なんだが…

416:nobodyさん
14/05/11 15:37:28.00
>>415


どこを言ってるんだろう

417:nobodyさん
14/05/11 15:40:10.91
ん、Model.phpを「static」で検索してみたけどひとつもヒットしないよ
調べたverは2.4.6
cake3ではstaticになっているってこと?言葉の使い方がヘンなだけ?

418:nobodyさん
14/05/11 18:47:27.75
>>398
> つまり結局はタイミングの問題でしかなくて、言語の優劣がどうとか、フレームワークの優劣がどうとか、といった観点は殆ど無く選びました。
つまり結局は、他に行ったから、とりあえず元鞘を叩いておくかっていう3流エンジニアの日常か

419:nobodyさん
14/05/12 01:19:34.02
>>414
それマジで質問してるならこんなところにいないで
基本的なオブジェクト指向の勉強したほうが良いよ。

420:nobodyさん
14/05/12 01:30:03.56
>>414
static のメリットをひとことで言うと、状態を持たない(状態が変化しない)
振る舞いを提供することにより、インスタンス化した場合に本来であれば考慮するべき
状態変化の副作用から開放されることではないかと。

まず間違いなく、テストは超簡単になる。

一方、アクセス修飾子のメリットはひとことで言うと
安全な設計が簡単にできるってことではないかと。
その点 CakePHP はメンバー変数の修飾子に public を使いまくってて恐ろしいほどではある。

421:nobodyさん
14/05/12 01:35:05.49
俺もstaticって使いどころがいまいちわからん。
特にphpはランタイムが短すぎて、1回しか使わないオブジェクトが多く、
staticを変に意識すると、むしろなんでもstaticでいいんじゃないかと思えてきてしまってこわい。
逆にstaticにしないと困るような事も、あんまないから、よくわからないままで結局staticは使わないという

>>414
たとえばモデルに、とある機能を作ってたら100行を超える長いメソッドになってしまい、一部を切り出したけど、
コントローラーから直接切り出したメソッドを呼ばれるのは想定外って場合に、
protectedかprivateにしておけば、呼ばれることがない。

protectedとprivateは、コントローラーやモデルを触ってるくらいなら、
正直使い分けが活きることがほとんどない気がする。
強いて例を出すと、AppController内の処理で切り出したメソッドが、ほかのコントローラーから呼ばれるのが想定外なら、
privateにしておくと呼ばれなくなる。

422:nobodyさん
14/05/12 01:45:18.99
>>421
>なんでもstaticでいいんじゃないかと

だけどオブジェクトの状態に依存しないメソッドなんて
そうそう作る機会はないと思うんだが、
もし可能なら作って問題無いと思うんだけど?
というか、むしろ作るべき。

423:nobodyさん
14/05/12 02:01:04.78
>>422
もちろん、思えてきてしまうだけで、よく考えるとダメな事がほとんどなんだけどね。
クラスやメソッドを書き始めるときに、まずこれはstaticにできるか?
と考えると、問題ないような気がしてしまうんよ。

そういえば、かなり昔だけどCakePHPを使い始める前のオレオレフレームワークでは、
データベースアクセスするとこ全部staticメソッドにしちゃってたなぁ。
いわゆるCRUDに対応したメソッドがあるだけだったし、データはオブジェクトじゃなくて連想配列だったから、
インスタンスいらないなぁと思って。
あとバリデーターもstaticメソッドだったなぁ。
バリデーションはコントローラーでやってたから、CakePHPでいうバリデーションルールの配列みたいなのは、
コントローラーに書いて、AppController的な親にvalidateメソッドを作ってた。

424:nobodyさん
14/05/12 02:19:15.31
このスレにはガチのstaticおじさんが居る気がする

425:nobodyさん
14/05/12 04:23:13.01
cakeってfindがstaticでないのが不思議でしょうがない

426:nobodyさん
14/05/12 10:30:47.47
>CakePHPのModelはまさに「全部static」

言いたいことは何となく分かる
他のフレームワークだとModelのstaticメソッドがテーブル(Repository)の操作
インスタンスメソッドがレコード(Entity)ごとの操作に対応してるのが多い

CakePHP2まではEntityがないので
そういう他のFWから入ってModelのインスタンスはEntityだろと決めつけてかかると
ModelにRepositoryの要素しかなくてfindもインスタンスメソッドという点に違和感をおぼえる

CakePHP3だとEntityクラスとTableクラスがそれぞれ用意されるからギャップが減る
クラスが分かれるからfindがインスタンスメソッドなのは変わらないけど
DDDを意識した設計で個人的には好感触


というか他のFWのstaticなfindも
RepositoryないしQueryに相当するオブジェクトのインスタンスメソッドに処理放り投げてるだけだろうし
ただ単に使い勝手とどこまでFWが暗黙的に処理するかってだけの問題な気がする

427:nobodyさん
14/05/12 10:33:48.09
>>425
状態依存しないメソッドなら問題ないけど
CakePHP の Model のオブジェクトって状態を持ってるから無理だよ。

たとえば同じPostクラスのオブジェクトが2個あったとして
$Post1->id = 1;
$Post2->id = 2;
ってした場合にメソッドが static なら破綻する。

428:nobodyさん
14/05/12 10:36:05.68
>>426
なるほど

429:nobodyさん
14/05/12 10:47:42.76
>>427
findと何か関係あるのそれ?

430:nobodyさん
14/05/12 11:14:24.54
cakeってTable Data Gatewayパターンだと考えれば普通なんだけどな

431:427
14/05/12 11:59:05.87
>>429
例えを簡単にするつもりだったが $id は関係無かったか。
要するに find が参照するプロパティのうち
状態依存のものが沢山あるってこと。

例えば
$Post1->primaryKey = sid;
$Post2->primaryKey = cid;
とか

432:nobodyさん
14/05/12 12:02:34.37 U9jrOtar
TreeBehaviorsについて質問なのですが、

moveUpやmoveDownがfalseを返してきてまったく動作しません。
発行したSQLを見ると、SELECT文ばっかりでUPDATEをやっていないように見えます。
どうやったら動かすことができるのでしょうか。

433:nobodyさん
14/05/12 12:18:35.60
>>432
スキーマ、レコード、moveUp moveDown のコード、クエリ
この辺を貼り付けてみて

434:nobodyさん
14/05/12 12:38:18.89
CakePHPって3でActiveRecordを採用するんだったよな

435:nobodyさん
14/05/12 13:15:30.27
>>433
DBやレコードはお客のやつなんでまずいんです。ごめんなさい。

スキーマにはちゃんと
parent_id, lft, righ の定義はしてあって、moveUp, moveDown以外のツリー動作は
問題なく動作しています。


public function moveup($id = null) {
   $this->Category->id = $id;
   $res = $this->Category->moveUp($this->Category->id, abs(1)) ;
debug($res);
}

436:nobodyさん
14/05/12 13:24:21.16
>>431

CakePHPのモデルが状態を持ってることが、むしろ混乱の元になってる気がするけどな。
ループ内でsaveするならcreateしろ、とか。
結局find()したら連想配列を返すし、save()だってモデルにデータ持たせたりせずsave()に引数渡すことばかりじゃない?
よく使うfindとsaveで違和感を感じるだけで、インスタンスである必要な機能もあるけど。

まぁ言いたい事はたぶん >>426 と似たようなことなんだろうけど、
ほかのフレームワークをあまり触ってないから、違和感レベルでしか語れない。

437:nobodyさん
14/05/12 13:36:54.55
>>435
じゃぁ、verify() した結果を見たらヒントがあるかも

debug($this->Category->verify());

どこかで整合性が崩れてると実行されない可能性有り。

438:nobodyさん
14/05/12 13:49:48.47
>>437
ありがとうございます。試してみました。

verify()でしばらくかかりましたが、真っ白な画面がリターンされました。
これはツリーに不整合などの異常がなかったということですよね。

439:nobodyさん
14/05/12 14:00:55.26
>>438

時間かかってなおかつ白い画面ってことはタイムアウトですね。
かなり大きいんですね。
成功すれば bool(true) が返る。

Shell でやってログに書き込んで確認してみたらいいかも。

440:nobodyさん
14/05/12 14:03:28.70
タイムアウトで白い画面って・・・もしかして本番環境・・・?

441:nobodyさん
14/05/12 14:04:31.37
TreeBehavior 適用してるテーブルに他のモデルから更新したら
整合性グチャグチャになるから注意

442:nobodyさん
14/05/12 14:10:08.15
>>439
ありがとうございます。お察しの通りノードが3万以上あるツリーなのです。
白画面はタイムアウトですか。勉強になりました。

TeraTermからサーバにログインし curl コマンドでverifyのURLにアクセスしましたが、
ブラウザから呼んだ時とは違い、瞬時にプロンプトが返ってきてしまいます。

シェルでverifyを実行とは、具体的にはどうすればいいのでしょうか?

443:nobodyさん
14/05/12 14:11:10.17
>>440
いいえ、本番のデータをまるまるコピーしてきましたが、デバッグ環境です。

444:nobodyさん
14/05/12 14:12:13.34
>>441
他のモデルからTreeを適応しているテーブルには書き込みしに行っておりません。

445:nobodyさん
14/05/12 14:13:55.11
debug=2でタイムアウトしたら

Fatal error: Maximum execution time of 30 seconds exceeded in

ってでないっけ?

446:nobodyさん
14/05/12 14:15:27.41
>>445
Configure::write('debug', 2);

でやりましたが、白画面でした。

447:nobodyさん
14/05/12 14:27:56.28
Console/commant/VerifyHogeShell.php

classVerifyHogeShell extends AppShell {

 protected function result() {
  $Hoge = ClassRegistry::init('Hoge');
  return $Hoge->verify();
 }

 public function show() {
  debug($this->result());
 }

 public function dump() {
  //!TODO ログに書き込むロジックを記述
 }

}

こんなファイルを作って

$Console/cake VerifyHoge show

とか

$Console/cake VerifyHoge dump

とか

Shell の作り方・使い方はぐぐれば幾らでも出てくる

448:nobodyさん
14/05/12 14:31:07.10
>>442
cURLからアクセスしても最大実行時間は一緒だ。
コンソールからPHPプロセスを利用しなきゃ。
php のユーザーが誰かってことが抜け落ちてる。

449:447
14/05/12 14:32:38.76
1行目ミスった

>Console/commant/VerifyHogeShell.php

Console/Command/VerifyHogeShell.php

450:nobodyさん
14/05/12 14:37:04.67
>>447
>>448
ありがとうございます!
AppShellなるクラスが用意されていたのですね。知りませんでした。
さっそく試してみます。

451:447
14/05/12 14:41:43.59
TeraTerm ってことは Windows か。
わかってるだろうけどコマンドのディレクトリセパレータは / じゃなくて \ な。

452:nobodyさん
14/05/12 15:16:40.76
>>447
>>448

verify()をShellから実行した結果、180超のエラーが出力されました。
特に多いのは index missingというやつです。
recover() で回復できますでしょうか?


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