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

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

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

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


■過去スレ
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0757nobodyさん2009/02/16(月) 21:37:13ID:???
>>756
AppModelだろjk
0758nobodyさん2009/02/16(月) 21:44:40ID:???
>>757
根拠は?
0759nobodyさん2009/02/16(月) 21:54:17ID:???
>>758
つ http://book.cakephp.org/ja/view/18/
0760nobodyさん2009/02/16(月) 21:58:13ID:???
どこに何を書くのか、正直迷う事がある。

>739で教えて頂いたのはFormHelperの拡張だったけど、
同じ機能を、
class DateFormHelper extends AppHelper {
var $helpers = array('Form');
でもほぼ同じで実現できる。できるんだけど・・・
FormHelperの拡張の方がいいのか?
FormHelperを読込む方がいいのか?
パフォーマンスに違いって出る??
0761nobodyさん2009/02/16(月) 22:19:02ID:???
>>757
親クラスに手を入れてよいものなのか?
0762nobodyさん2009/02/16(月) 22:24:43ID:???
manyuaruyomekasu
0763nobodyさん2009/02/16(月) 23:02:45ID:???
>>759
それはアプリ固有の話だろ
バリデーションなら他のアプリでも流用できるんだから
ビヘイビアのほうがいい
0764nobodyさん2009/02/17(火) 00:34:45ID:???
>>763
あんた天才。
email や name っていうよく使う奴だったら validation behaviour を作って、
それにまとめてかいて actas で読み込むってことか。

ナイス、アイデア!
0765nobodyさん2009/02/17(火) 06:29:15ID:???
strutsしか触ったことないから、バリデーション記述場所に違和感が。
最近のフレームワークはみんな、バリデーションをモデルに書くものなのかな?
0766nobodyさん2009/02/17(火) 09:56:53ID:???
>>761
何のためのapp_modelだと思っているのだ、キミは。
>>763-764
複数のappで共有するためにbehaviorを使うということかな?
具体的にどうするんだろうか?
setupで、$model->validateを書き換え、ってことかな?それとも、beforeSaveを利用するの?
0767nobodyさん2009/02/17(火) 10:00:17ID:???
あれ?単に独自メソッド記述すれば、$model->hoge()が使えるんだっけ?そこでvalidateするってことか。理解したわ
0768nobodyさん2009/02/17(火) 17:55:44ID:???
paginateですが、検索条件を次の画面に引き渡したい時はセッションに入れるべきですか?
それともURLパラメータにセットすべきなの?
0769nobodyさん2009/02/17(火) 20:09:38ID:???
>>766
ModelBehaviorクラスにbeforeValidateがあるからそれを使えばいいお
0770nobodyさん2009/02/17(火) 21:53:41ID:???
これとCodeIgniterってどっちがいいの?
07715602009/02/18(水) 10:11:30ID:???
ドキュメントのコードをざっと見て、見やすい方を選択すればよろし
0772nobodyさん2009/02/18(水) 10:25:52ID:???
>>770
つ http://pc11.2ch.net/test/read.cgi/php/1229960175/
0773nobodyさん2009/02/18(水) 12:03:42ID:???
Googleトレンド見たらRailsに追い付きそうだ
0774nobodyさん2009/02/18(水) 16:57:38ID:???
Cake、便利なんだけど、
フォームのname属性見るだけで
データベースのスキーマが手に取るようにわかっちゃうのがなんか嫌。
0775nobodyさん2009/02/18(水) 17:04:35ID:???
それがいいんじゃないの?
0776nobodyさん2009/02/18(水) 19:23:15ID:???
それはセキュリティ的にだめだろうね
0777nobodyさん2009/02/18(水) 19:27:16ID:???
何がセキリュティ的に駄目なんだ?
もともとスキーマが分かれば攻撃できちゃうような
駄目システムがさらに弱くなるってことか?
0778nobodyさん2009/02/18(水) 19:31:09ID:???
その時完璧な対策を施しても脆弱性なんてほとんどのシステムで見つかるものだから
脆弱性が見つかった後の防御が落ちる
0779nobodyさん2009/02/18(水) 20:25:48ID:???
スキーマが?
0780nobodyさん2009/02/18(水) 20:45:10ID:???
Commercial FREE って意味はなんですか?
商用でもOKってことですか?
0781nobodyさん2009/02/18(水) 20:47:06ID:???
CMが無料ってことなんじゃないかな
0782nobodyさん2009/02/18(水) 20:47:11ID:???
>>778
要するにフィールド名がすぐにわかるようではセキュリティに問題があるということね。

なら、君は今から、
「脆弱性対策のために安易に推測できるフィールド名を使わないようにする。」
というルールを提唱するべきだ。

例
商品名のフィールド名を product_name にしてはいいけない。
値段のフィールド名を price にしてはいけない。
0783nobodyさん2009/02/18(水) 23:04:31ID:???
このサイトのバグって1.2で修正されてる?
ttp://blog.livedoor.jp/coelacanth_blog/archives/55093835.html
0784nobodyさん2009/02/19(木) 00:14:13ID:???
>>782
落ち着けよ。
「出さなくて済む情報は可能な限り出さない」
はセキュリティの基礎の基礎でしょうが。

>商品名のフィールド名を product_name にしてはいいけない。
product_nameだろうとfooだろうとbarだろうと
「公開されているのは、公開されていないより、
 セキュリティ的には望ましくない」

あとは生産性その他との
トレードオフでどう考えるかという話。
(でもスキーマが判るのはcakeに限らないんじゃないか?
 よく知らんけど)
0785nobodyさん2009/02/19(木) 01:07:16ID:???
>>763

でも、behavior(振る舞い)じゃぁないよね。。

振る舞いになんの?
0786nobodyさん2009/02/19(木) 09:54:12ID:???
>>785
つまり、HtmlHelper で足りないものをTextHelperで補うイメージかと。
本来のbehaviorのあり方からいくと、役割が違うというのは、今まで類似のものがない(よね?)ことからも窺い知れるが。
0787nobodyさん2009/02/19(木) 11:24:36ID:???
cake bake all
しても、なかなか1回で全ての関連テーブルを
認識してくれないのって、そのうち直るのかなぁ。
今は、何回かbake allすると、少しずつ認識される感じ。
0788nobodyさん2009/02/19(木) 12:06:46ID:???
view から layout の body タグを変更する事はできますか?

layout で <body id="bodyContainer"> とかいてあるものを使っているのですが、
いくつかの view だけ body の onload を書きたいのですが、
onload のために layout がどんどん増えるのは嫌なので、
view から body に onload を足す事できないかなぁ、と。

何かよい方法ないでしょうか?
0789nobodyさん2009/02/19(木) 12:20:59ID:???
>>788
普通にコントローラーでsetすればいいよ。
0790nobodyさん2009/02/19(木) 12:23:38ID:???
>>789
コントローラで何をセットするんでしょう?
すみません…。
0791nobodyさん2009/02/19(木) 12:47:55ID:???
それは俺はわからないよ。あなたが表示したい内容を。
0792nobodyさん2009/02/19(木) 12:54:43ID:???
うーん、すみません、よくわかりません

view\layouts\default.ctp には

<body id="bodyContainer">
<?php e($content_for_layout); ?>
</body>

とあって、コントローラからは

var $layout = "default";

としてレイアウトを利用しています。

ここで、あるビューだけ、レイアウトは default.ctp を使いつつ
body タグの内容を
<body id="bodyContainer"> → <body id="bodyContainer" onload="hoge();">

にかきかえたいですが、コントローラでどのようにセットすればいいんでしょうか?
0793nobodyさん2009/02/19(木) 13:42:29ID:???
もう解決してるとは思うけど、
setした内容は$content_for_layoutの中身だけで使えるわけじゃないです。どこでも使えます。
0794nobodyさん2009/02/19(木) 14:09:58ID:???
いえ、実はまだ理解してないんですが…。
もしかして、コントローラで、

$this->set("body", '<body id="bodyContainer" onload="hoge();">');

して、view\layouts\default.ctp の中で、

<?php e($body); ?>

こうするって事?

もしそうなら、(わがままかもしれませんが)
そのレイアウトを使う全てで body を set しないといけなくなるので、
まるごと出力じゃなくて、場合によって
追記、もしくは置換できるといいんですけど…。

いくらなんでもそこまでは無理でしょうか。。。
0795nobodyさん2009/02/19(木) 14:22:39ID:???
追記、もしくは置換したいところだけ変数にすればいいじゃないすか。
0796nobodyさん2009/02/19(木) 14:24:33ID:???
>>794
$this->set()の使い方をおさらいして、発想を変えてみましょう
0797nobodyさん2009/02/19(木) 14:45:31ID:???
>>もしくは置換したいところだけ変数にすればいいじゃないすか

そうか…そうですね…。

頭カチカチだったようです…。
情けない…。

大変ありがとうございました。
0798nobodyさん2009/02/19(木) 17:11:58ID:???
app全体で使う定数ってどこで設定するの?
0799nobodyさん2009/02/19(木) 17:50:53ID:???
bootstrapでいいんじゃない?
0800nobodyさん2009/02/19(木) 18:53:52ID:???
bootstrapが、いい
0801nobodyさん2009/02/19(木) 18:54:22ID:???
bootstrapにしろ
0802nobodyさん2009/02/19(木) 19:47:50ID:???
いや、bootstrapのほうがいい
0803nobodyさん2009/02/19(木) 19:57:34ID:???
一つのフォームから二つのテーブル、つかモデルを更新したい場合ってどうやって書くの?

そういった場合はフォームヘルパー使えないよね?
0804nobodyさん2009/02/19(木) 20:01:14ID:???
>>803
キミがやろうとすることは大体できると思って良い
http://book.cakephp.org/ja/view/547/
http://book.cakephp.org/ja/view/75/
0805nobodyさん2009/02/19(木) 20:09:14ID:???
著作権表示は必要ですか?
Cakeで構築されたサイトは表示してないですけど
どうでしょ?
0806nobodyさん2009/02/19(木) 20:13:03ID:???
>>804
即レスありがとうございます!
0807nobodyさん2009/02/19(木) 20:14:57ID:???
>>805
MITライセンスだから必要です。
0808nobodyさん2009/02/19(木) 20:22:31ID:???
うちは外には開放しないから
ライセンスの事は気にして
無かったけど。
アクセスして来る人にも
ライセンスを見せないといかんの?
0809nobodyさん2009/02/19(木) 20:26:56ID:???
薬剤師の情報?サイトライセンス表示してないですよ?
0810nobodyさん2009/02/19(木) 20:36:35ID:???
>>803みたいな場合って、
formヘルパーのcreateメソッドの$modelには何を入れるべき?nullでいい?
0811nobodyさん2009/02/19(木) 20:44:39ID:???
>>810
特に必要がなければnullでよい
0812nobodyさん2009/02/19(木) 20:45:25ID:???
え?サイト内に Cakeで作ってますよ って表示するってこと!?
0813nobodyさん2009/02/19(木) 20:48:37ID:???
>>812
そうですよ
0814nobodyさん2009/02/19(木) 20:51:27ID:???
>>811
ありがとう
0815nobodyさん2009/02/19(木) 21:05:17ID:???
memberモデルとprojectモデルを、members_projectsでつないで
HABTMにしてる。memberが1,2,3、projectがA,Bとする。
・project Aにmember 1,2が関わり、
・project Bにmember 2,3が関わる。

この状態で、project Aのmemberを1,3にすると、
project Bに関わるmemberから、member 2が消えてしまう。

たぶん自分が悪いんだろうと思うのだけど、
素朴なHABTMモデルなので、理由が分からず。。。
0816nobodyさん2009/02/19(木) 21:12:05ID:???
HABTMのuniqueでいいんじゃない?
0817nobodyさん2009/02/19(木) 21:56:13ID:???
addons.mozilla.orgってCakeで作られてることサイトのどっかに表示してる?
0818nobodyさん2009/02/19(木) 21:59:30ID:???
>>813 はあ?
0819nobodyさん2009/02/19(木) 22:05:03ID:???
ぺっ
0820nobodyさん2009/02/19(木) 22:12:17ID:???
ソースを渡すときだけじゃないの?
0821nobodyさん2009/02/19(木) 22:21:22ID:???
それこそ上の方の話じゃないけど、
「Cakeで作ってます」って表示する方が
セキュリティのリスクが高くなるじゃん。
0822nobodyさん2009/02/20(金) 00:20:06ID:???
ソースの中に書いてあればいいのでは。
0823nobodyさん2009/02/20(金) 00:40:30ID:???
そーっすね
0824nobodyさん2009/02/20(金) 00:45:27ID:???
そ・・・
0825nobodyさん2009/02/20(金) 00:52:40ID:???
しょーゆこと
0826nobodyさん2009/02/20(金) 01:01:35ID:???
>>816
815です。まさにそれでした。
'unique'=>false、とすると、大丈夫なんですね。
助かりました。ありがとう。

# trueがデフォルトらしいけど、trueの使い方が分からない。。。
0827nobodyさん2009/02/20(金) 01:07:11ID:???
>823-825
この流れは秀逸。
そーっすねというありきたりな発言から、最終的には村上ジョージになってしまうという。
0828nobodyさん2009/02/20(金) 01:39:48ID:???
アクションの最初で、

if (!empty($this->data))...

みたいに判定するのがなんか気持ち悪いんですが、
みなさんどうしてます?

RequestHandlerとか使えばいいのかな?
0829nobodyさん2009/02/20(金) 03:22:14ID:???
俺は if(isset()) だな。
0830nobodyさん2009/02/20(金) 10:08:57ID:???
>>828
思いつきだけど
オレオレComponent(かapp_controller)でチェックするのもよいかも
if ( $this->Ore->isPost() ) ...
入力補完が効く分、良いかな?
0831nobodyさん2009/02/20(金) 10:22:41ID:???
オーバーヘッドが増えるだけじゃね?
・・・って今更か。
0832nobodyさん2009/02/20(金) 15:23:39ID:???
methodひとつ分のオーバーヘッドも気になるの?
0833nobodyさん2009/02/20(金) 18:16:44ID:???
reservesってテーブルをbakeしたら、
reserfにされた。あほー
これ、どうしたらいいと思う?

1)複数形のルールを書いてbakeし直す
2)reserf→reserveに自分で全部書き直す
3)そのまま使う
0834nobodyさん2009/02/20(金) 18:40:02ID:???
>>833
1がよい
0835nobodyさん2009/02/20(金) 19:15:41ID:???
RoRで作ろうかcakeで作ろうか迷ってるんだが・・・。
0836nobodyさん2009/02/20(金) 19:16:04ID:???
RoRがいいよ
0837nobodyさん2009/02/20(金) 19:20:26ID:???
>>834
おーけー。そうした。さんきゅー。
0838nobodyさん2009/02/20(金) 19:29:22ID:???
>>836
RoRはあんまり触ったことがないんだよね。
チュートリアルやってみた感じだと、cakePHPと似てるみたいだけど。
0839nobodyさん2009/02/20(金) 20:49:07ID:???
>>838
RoR以降のフレームワークはすべてRoRのパクリだから
CakePHPも例外じゃない
0840nobodyさん2009/02/20(金) 21:11:09ID:???
railsは環境作るのが面倒
0841nobodyさん2009/02/20(金) 22:04:37ID:???
CakePHPも遅いけど、RoRはもっと遅い
0842nobodyさん2009/02/21(土) 00:44:11ID:???
cakephp1.2は1.1に比べて相当スピーディーに動くね。
1.1は重すぎる。
0843nobodyさん2009/02/21(土) 00:56:54ID:YnbiMze9
cake1.2にコンポーネントでQdmailを使おうとすると、
PHPのメモリーリミット(8M)に引っかかってエラーになってしまいます。
ローカル環境ならPHPのメモリー設定すれば使えるんですが、
本鯖は設定がいじれないので困ってます。

Qdmail使ってる方はそんなにメモリー食いませんか?
なんか軽く使えるような設定あるんでしょうか?
0844nobodyさん2009/02/21(土) 01:29:06ID:???
PHPのメモリーリミットは
用心のためのリミット。

ソフトウェアから簡単に上限を変更できる。
まあ共有サーバーでしょうから節度を守った使い方をするように。
0845nobodyさん2009/02/21(土) 02:30:33ID:YnbiMze9
>>844
レンタル鯖で、php.iniや.htaccessではダメだったんですが、
phpの中からメモリ設定してやればOKでした。ヒントどうもありがとう。
0846nobodyさん2009/02/21(土) 08:15:24ID:???
>>843
Qdmail使っているけどひっかかったことはないし、Qdmailというより、そこまでの処理だとかメールの内容とかの問題のように思うが。
0847nobodyさん2009/02/21(土) 11:34:41ID:???
Qdmailってホント便利だよね〜。作者に感謝。
メール本文は当然、タイトル(見出し)、送信者名の日本語が絶対文字化けしない。
CakePHPで安心して日本語メールが送れる。

Qdmailの使い方 CakePHPでのメール送信
http://hal456.net/qdmail/cakebase#c

※CakePHP1.2から「Emailコンポーネント」が標準装備されたが、日本語メール送信
には少々難あり。残念!
0848nobodyさん2009/02/21(土) 15:29:15ID:???
俺は標準のEmailコンポーネントをサブクラス化して使ってる。
問題ある部分の文字コードなどを変換して送信とかしてる。
必要な部分しか対応していないけど。
0849nobodyさん2009/02/21(土) 17:11:38ID:???
>>848
問題のある部分ってどこなの?
to , from , subject であってる?他もある?bodyとか

結局Qdmail使ってるんだけど、本当はMailComponent使いたいんだよね。
0850nobodyさん2009/02/21(土) 17:37:44ID:???
誰か、Blog Plugin 公開してくれないかな
08518432009/02/21(土) 17:49:16ID:???
>>846
そうですか。使い方はいたって普通というか、Qdmailのサイトに乗っている通りの使い方です。

例えば、users_controllerで登録したユーザーにメールを出すという感じの使い方で、
var components = array('Qdmail'); として、
function _sendusermail() みたいに関数にして作ってます。

でも、users/index みたいにQdmailを使わないアクションを呼び出しても、
メモリエラーが出ます。var components からQdmailを外すとエラーは出ません。
ので、Qdmailを読み込んだ時点でメモリを凄く食ってるのかな。と思ってるのですが。

とりあえず、ini_set("memory_limit", "-1"); とやって制限を外すことで動きました。
0852nobodyさん2009/02/21(土) 18:00:40ID:???
>>849
CakePHP1.2のEmailコンポーネントは、
ファイル添付で、日本語ファイル名もNGじゃなかったかな?

Qdmail使っとく方が悩まなくて良いと思うけどなあ?
なぜ、EmailComponent使いたいの?
0853nobodyさん2009/02/21(土) 18:14:23ID:???
>>849
CakePHP 1.2.0.6311-betaの08/02/21のEmail Componentの調査報告
p.19〜p.28に日本語メールの事が書いてある。
http://handsout.jp/slide/225
0854nobodyさん2009/02/21(土) 23:31:08ID:???
urlのどこかに(ユニークな)セッションIDを追加するとして、
他の、例えばpagenatorの変数と干渉せずに、追加して、
取得するには、どうしたら良い?
0855nobodyさん2009/02/22(日) 00:10:27ID:???
>>854
namedにでも入れとけばいいよ。
paginatorとかで使われないなら無視されるし。
0856nobodyさん2009/02/22(日) 00:50:22ID:???
>>855
当たり前かもしれませんが・・・
アクションに渡すパラメータが先で、
namedに入れるのはurlの最後ですよね?
■ このスレッドは過去ログ倉庫に格納されています