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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
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の最後ですよね?
0857nobodyさん2009/02/22(日) 04:45:42ID:???
もしくは、pagenatorを使うなら、

/model/view/1
とかして、
function view($id) {
で$idを取得せずに、

/model/view/id:1
function view() {
$id = $this->params['named']['id'];
みたいにして取得した方が無難?
0858nobodyさん2009/02/22(日) 10:08:35ID:???
DBがujisでビューとコードがUTF-8だと、saveしたときに「嵜」「〜」「@」が化けますよね。
それで出力はeucJP-winからUTF-8にして、保存はUTF-8からeucJP-JPにしたいのですが、何か良い方法はありませんか。
0859nobodyさん2009/02/22(日) 10:18:13ID:???
>>858
http://book.cakephp.org/ja/view/40/
encoding
0860nobodyさん2009/02/22(日) 10:19:25ID:???
おはよう。
ググったら、「pagenator使う時にはGETのパラメータは
無効になる」って書いてる所があったけど。
試してみたら、
/model/view/sort:id/1とか、間に他のパラメータが入ってても、
viewのアクションの引数に1が渡ってた。すごい。

そうすると。$html->link()で、urlに'id:1'とかを挿入する
スマートな方法があれば良いんですけど。
$named='/id:'.$id;
echo $html->link('Enter', '/pages/home'.$named, $htmlAttributes);
みたいに書き替えて行かないとダメですかねぇ?
$htmlAttributesに追加する方法とかありますか?
0861nobodyさん2009/02/22(日) 10:31:34ID:???
>>859
database.phpの設定は既にutf8なので、他の文字は化けません。
新JISが化けるんです。
0862nobodyさん2009/02/22(日) 12:31:33ID:???
>>861
なぜにutf8なの?
0863nobodyさん2009/02/22(日) 13:17:59ID:V5qtKih8
>>861  >>862
そうだよねえ。database.phpの設定はujisで、
encodingでハンドリングするんだよねえ。
0864nobodyさん2009/02/22(日) 13:25:06ID:???
>>863
日頃の行いの悪い奴は、IDが公開される
0865nobodyさん2009/02/22(日) 13:33:04ID:???
>>862
database.phpのencodingをutf8にすると、内部でSET NAMEされているようで表示は問題ありません。
ただ、それだと保存したときに新JISが登録出来ないので、database.phpの設定をujisにして、ビューに渡すデータはeucJP-winからUTF-8にして、モデルに渡すデータはUTF-8からeucJP-winにしたい、ということです。
紛らわしくてすみません。
0866nobodyさん2009/02/22(日) 15:38:22ID:n5m/3HJ0
railsがcakephpより遅いとか誰が言い出したのかね〜?
railsの方が断然はやいよ。測定するまでもない。数倍違うから体感できる。
0867nobodyさん2009/02/22(日) 16:08:49ID:???
>>865
よく分かってないけどDBの文字コードは変えられないという仮定で。
一般的には、beforeSaveとafterFindで変換だけど、それじゃだめってこと?
0868nobodyさん2009/02/22(日) 16:21:57ID:???
>>866
早いとかそれ以前にRubyは後方互換性が低いからどうも・・・
0869nobodyさん2009/02/22(日) 19:20:17ID:mjuU1FsC
バリデーションはDB使わない場合は使えないの!?

$useTable = false;

しても、バリデーションしようとするとDBエラーが出るよ・・・(;´Д`)
0870nobodyさん2009/02/22(日) 19:27:43ID:???
エラーが出るのは $form->error() ね
0871nobodyさん2009/02/22(日) 19:32:35ID:???
仕様ですか、そうですか

http://cakephp.jp/modules/newbb/viewtopic.php?post_id=2771&topic_id=1317&forum=6

柔軟性のないFWだなあ…
0872nobodyさん2009/02/22(日) 19:56:41ID:???
解決方法がみつかるだけマシ
0873nobodyさん2009/02/22(日) 20:31:34ID:???
フォームの入力値をtrimするとして
モデルでやったほうがいいのかね?
コントローラー?
0874nobodyさん2009/02/22(日) 20:48:45ID:???
>>873
個人的にはコントローラ、コンポーネントのような気がする。
0875nobodyさん2009/02/22(日) 21:09:32ID:???
>>873
どちらがベターかと言えばModelだろうねえ
Controller(やComponent)でやるほうが簡単だったりするがMVC的にM

でもオレオレ解は、確認画面つくらないなら、Javascriptでやる
0876nobodyさん2009/02/23(月) 00:31:13ID:???
>>867
ありがとうございます。
>>867さんのヒントで自己解決しました。
0877nobodyさん2009/02/23(月) 04:12:40ID:???
>>873
モデルに一票。trimビヘイビア作るのもいいかもしれない。
ところで 自分は euc-jp で何度も痛い目あってutf-8オンリーでここ数年プログラムやってるけど
euc-jp で組んでる人ってなぜeucなの?
0878nobodyさん2009/02/23(月) 07:01:24ID:???
>>877
今まで(今でも)euc-jpで書かれたベタのPHPアプリが多く、php.iniがeuc-jpになって
いて変更出来ない。utf-8用サーバをもう一つ立てる事は費用対効果が許してくれない。
みんなPHPからCakePHPへ移行するのを面倒がる。メンテが主で、新規は少ないんだから
PHPのままでいいんじゃんとみんな消極的。(Cakeで作ったものを見ると、やっぱFWは
良いねえとは言うけど)
0879nobodyさん2009/02/23(月) 07:58:49ID:???
CakePHP Users in Japanフォーラムの記事が昨日から開けないんだけど、俺だけ?
ttp://cakephp.jp/modules/newbb/
0880nobodyさん2009/02/23(月) 07:59:36ID:???
CakePHP使ってる人って、Railsから移行してきた人が多いのだろうか?
0881nobodyさん2009/02/23(月) 08:52:50ID:???
>>880
逆だろ。railsは運用のハードルが高いからphpでってのが多いんじゃない。
0882nobodyさん2009/02/23(月) 09:10:43ID:???
RoRは導入コストが…。
0883nobodyさん2009/02/23(月) 09:26:12ID:???
導入にコストなんて無いだろ
対応したエンジニアが居れば良いだけ
0884nobodyさん2009/02/23(月) 09:41:24ID:???
手間=コスト
0885nobodyさん2009/02/23(月) 10:35:42ID:???
たった2行で矛盾を表現する>>883の才能に嫉妬
0886nobodyさん2009/02/23(月) 14:36:47ID:???
>>878
なるほど。自分も以前euc-jpで作ったサイトをutf-8に変更するの相当面倒だったもんなー。
0887nobodyさん2009/02/23(月) 17:39:27ID:???
cakephpのmodelが関連データを引っ張って来てくれる機能は
非常に強力でありがたいが。関連が複雑になる(数が増える)と
hasOneやbelongToなどがどこまでデータを持ってくるのか、
未だに把握できてない。
簡潔明瞭に説明してくれてる所はないものか。
0888nobodyさん2009/02/23(月) 18:58:53ID:???
FORMヘルパーでセレクトボックスを生成する場合なんですが、
テーブルにfirst_nameとlast_nameというカラムがある場合、この二つを結合した値をセレクトボックスのラベルとして表示したい時はcombineを使うしかないんですかね?

railsだともっと簡単にできるんでしょうか・・・。
0889nobodyさん2009/02/23(月) 19:45:35ID:???
>>888
第2引数が値と表示名の配列になっていればよいので、自分で配列作ってあげればよい
0890nobodyさん2009/02/23(月) 20:03:44ID:???
>>875
Javascriptでやる
(ぷぷ)
0891nobodyさん2009/02/23(月) 20:15:25ID:???
javascriptからPHPのプログラムを呼びたいんですが、
この時PHPのプログラムはコントローラに当てはまるんですかね?
また、どのディレクトリに置けばいいんでしょうか?
0892nobodyさん2009/02/23(月) 21:32:43ID:???
addressフィールドを扱うaddressモデルからprefectureフィールドを
参照する時って、addressモデルにアソシエーションが書いてあれば、
prefectureモデル(model/prefecture.php)って作らなくても大丈夫?
0893nobodyさん2009/02/24(火) 00:07:55ID:???
>>891
cakeのアクションとして呼び出すならコントローラだし、
cakeと全然関係ないならvendorsとかにいれとけばいいのでは。
0894nobodyさん2009/02/24(火) 07:17:11ID:???
>>879
セキュリティソフトを一時停止にしたら閲覧出来る様になった
0895nobodyさん2009/02/24(火) 07:58:11ID:???
>>893
なるほど。参考になりました。
0896nobodyさん2009/02/24(火) 08:00:04ID:???
>>890ってJavaaScriptオフだと効かないとかサーバーサイドでチェックしないと漏れがあるじゃんとでも言いたいのかな
0897nobodyさん2009/02/24(火) 08:44:03ID:???
>>896
まあ普通はそうだね。
クライアントサイドのバリデーションはおまけだから。
0898nobodyさん2009/02/24(火) 08:50:43ID:???
AuthCompornentを使っていて、login成功した際に、
loginした時間をデータベースのusersに記録したいのですが、
その処理はどこに書いたらいいんでしょう?

usersのloginアクションは認証前には来るけど、
認証が成功するとそれぞれのページに飛んでしまう。
login成功後(だけ)に処理させてくれる場所が分からない。
0899nobodyさん2009/02/24(火) 10:01:51ID:???
>>897
trimはバリデーションでもサニタイズでもないから漏れ上等ってならjsでも問題ないと思う
0900nobodyさん2009/02/24(火) 10:03:12ID:???
>>898http://book.cakephp.org/ja/view/395/autoRedirect
0901nobodyさん2009/02/24(火) 10:39:36ID:???
>>900
感謝

auth読んでたつもりだったが orz
0902nobodyさん2009/02/24(火) 12:21:07ID:???
jQueryヘルパーって役に立つ?
0903nobodyさん2009/02/24(火) 14:37:24ID:???
モデルで
function beforeFind($qd) {
$qd['conditions'] = 'delete_flag = 0';
return $qd;
}
こうすると、delete_flagが0の物しかfindされません。
普段はこれで良いのですが、まれにdelete_flag =1
のデータも検索したい時には、どうしたら良いでしょう?
0904nobodyさん2009/02/24(火) 14:58:00ID:???
>>903
Model::find()をオーバーライドする
0905nobodyさん2009/02/24(火) 15:55:29ID:???
findそのものをオーバーライドすれば、paginatorでも
有効のようですね。ありがとうございます。やってみます。

やりはじめたのですが。なんとなく、設定を解除しながら
使うよりも、そのつど設定した方が簡単なような気がして
きました。
どこにどのように設定されているか確認しながら解除する
必要があるため、厳密にやるとちょっと面倒。
0906nobodyさん2009/02/24(火) 17:53:07ID:???
cake.generic.cssの代わりのスタイルシートを作りたいんだけど、気をつけることってありますか?
0907nobodyさん2009/02/24(火) 17:54:24ID:???
…死ぬなよ。
0908nobodyさん2009/02/24(火) 18:12:40ID:???
>>906
ないよ。CSSなんて所詮CSS。
0909nobodyさん2009/02/25(水) 09:37:56ID:???
FORMヘルパーのcreateメソッドで生成されるformタグに
action属性が付かなくするにはどうすればいいですか?
0910nobodyさん2009/02/25(水) 09:48:59ID:???
>>909
こうじゃね? array('action' => '')
0911nobodyさん2009/02/25(水) 09:50:02ID:???
アプリケーション全体の設定はbootstrap.phpに
書くのが基本なんだろうけど、ユーザーがブラウザ
から変更できると良いこともあるので、どこかに
設定ファイルを持ちたいのだけれど。
どこに、どういう形で置くと、無駄が少ないだろう?
データベース?に配列ごとぶち込む?
設定ファイルに書くとしたらどこに、どんなふうに?
Cake流のやり方とかありますか?
0912nobodyさん2009/02/25(水) 10:33:30ID:???
>>911
bootstrap.phpにconfig()を記述して、外部の設定ファイルを読めばいいと思う
レス数が900を超えています。1000を超えると表示できなくなるよ。