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

【PHP】フレームワーク CakePHP 13ホール目【v2.0】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/11/09(水) 01:05:10.60ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja

前スレ
【PHP】フレームワーク CakePHP 12ホール目【笑】
http://hibari.2ch.net/test/read.cgi/php/1309505626/
0758nobodyさん2012/03/12(月) 13:24:30.73ID:???
よくある返信不可のメールアドレスって
@以前のユーザ作成してるのかな?noreplyみたいな
存在しないアカウントをreturn-pathに設定してメール送ってるのかな?
0759nobodyさん2012/03/12(月) 16:18:31.39ID:???
UI含めて設計について相談です。

複数チェックボックスを使って、チェックした項目をDBに登録し、
後から検索できるようにしたいと思います。疑問は2点。

1:テーブルの1つのカラム内にカンマ区切りで登録するのでしょうか?
2:その場合、conditionsで検索できるのでしょうか?
0760nobodyさん2012/03/12(月) 17:53:27.28ID:???
画像のサイズ別のURLって、
テーブルに保存してますか?
afterFindなどで組み立ててますか?
それとも、ビューでその都度組み立ててますか?
0761nobodyさん2012/03/12(月) 18:10:15.80ID:???
ビューで変えてます。携帯用の画像とか。
0762nobodyさん2012/03/12(月) 19:45:42.19ID:???
>>759
1は好きにしたらいい
2はインデックス当たらなくていいならできる
0763nobodyさん2012/03/12(月) 19:58:56.46ID:???
>>762
どうやって検索するのでしょうか?
1カラムにカンマ区切りのレコードがあったとして、
それをCakeのconditionsで検索する方法がわかりません
0764nobodyさん2012/03/12(月) 21:01:20.27ID:???
>>763
cakephpに配列をシリアライズして
登録するプラグインあるから、それ使え。
0765nobodyさん2012/03/12(月) 21:33:33.63ID:???
わかりました。探してみます
0766nobodyさん2012/03/12(月) 21:53:31.19ID:???
>>763
SQLのLIKEはわかってんのかな?
0767nobodyさん2012/03/12(月) 22:27:22.65ID:???
小一時間探しましたが、save時にシリアライズできるものの、
find時にconditionsで絞り込むのは無理みたいですね・・。
>>766
はい。それは分かりますが、登録されている値が
「1,10,11」みたいな場合、likeは利かないと思います。
0768nobodyさん2012/03/12(月) 23:32:17.51ID:???
>>756
>>757

ありがとうございます。
サーバサイドのJSでの実装を考えているため、種が漏れることはないと考えています。

ご回答/ご指摘ありがとうございました。
0769nobodyさん2012/03/12(月) 23:45:06.08ID:???
>>767
ソート順さえあっていれば、1かつ10かつ11なら column LIKE '%1,%10,%11,%' とかでいけるんじゃないの
ソートしてないのなら column LIKE '%1,%' AND column LIKE '%10,%' AND column LIKE '%11,%'
0770nobodyさん2012/03/12(月) 23:58:59.56ID:???
>>769
さすがにひどい。

>>767
方法1.「ビット演算 チェックボックス」でぐぐれ。
方法2.項目ごとにカラムを分ける。
0771nobodyさん2012/03/13(火) 02:48:15.55ID:???
脆弱性対策は大事だよ
http://www.1x1.jp/blog/2012/03/mass_assignment_vulnerability_cakephp.html
0772nobodyさん2012/03/13(火) 10:18:36.45ID:???
>>767
もっと頭使おうぜ
1,10,11
ではなくて
001,010,011
みたいにすれば、like %001% で検索できるだろ。
あくまで1例だから、データに何がくるかによって
良い実装があると思うので、よく考えて。
0773nobodyさん2012/03/13(火) 12:48:03.37ID:???
俺ならHABTMにしちゃうね
07747602012/03/13(火) 13:20:03.94ID:???
>>761
ビューが条件分岐だらけになりませんか?

if (!empty($post['Post']['image_filename']):

....

else:

こんな風に。

$post->getImageUrl(array('mobile' => true));
みたいに書けたらいいんですけどねぇ・・・
0775nobodyさん2012/03/13(火) 13:39:42.66ID:???
>>774
Helperつくれば?
0776nobodyさん2012/03/13(火) 13:45:55.38ID:???
>>775

そうなんですけど、
モデルの返り値が配列じゃなくてエンティティなら、
もっとスマートに書けるのに、と思いまして・・・

これがCake流なんですかね
0777nobodyさん2012/03/13(火) 13:53:09.13ID:???
>>772
その考えはありませんでした。勉強になります!

ビット演算の事を>>770さんから教えていただき勉強しましたが、
数学が苦手な私の頭ではさっぱりで、
単純にテーブルを分ける(Cake的にhasMany)を考えていました。

テーブルを分けて正規化する方法も一般的なようですが、
正直、チェックボックスを使用するカラムが必要な度に
テーブルを生成するのもどうかと思い、悩んでいました。

772さんの方法も視野に入れて設計面を工夫してみます。
みなさん、ありがとうございました。
0778nobodyさん2012/03/13(火) 22:24:16.17ID:???
likeなんか使ったらインデックス使えなくて
遅くなるだろw
0779nobodyさん2012/03/13(火) 23:03:53.03ID:???
>>776
エンティティが返ってこないのが俺がCakeが嫌いな理由の一つではある。
07807762012/03/14(水) 03:34:06.02ID:???
CakeEntityなんてのもあるみたいですが・・・

今はYiiを調べてる。
0781大便2012/03/15(木) 08:30:03.53ID:UhuckWxP
ペニー秋田は犯罪です。
早速ペニーオークションで破産しました。
0782nobodyさん2012/03/15(木) 15:50:54.34ID:???
>>778
別にLIKE使ったからってインデックス効かなくなるわけじゃないから
0783nobodyさん2012/03/15(木) 16:11:21.14ID:???
みなさん、プラグイン作成してます?
お問い合わせフォームとか会員専用ページとか
どのサイトでもよく使うファイルをプラグインにまとめるべきか否か悩みます。
0784nobodyさん2012/03/15(木) 20:50:17.13ID:???
>>782
効かなくなるが
0785nobodyさん2012/03/15(木) 21:19:00.56ID:???
>>783
どこまで汎用性もたせるか悩んで、
結局いつもコピペで済ませてる
0786nobodyさん2012/03/15(木) 21:56:56.36ID:???
ある程度規模でかいサイトで普通のLIKE検索はありえないよね。
0787nobodyさん2012/03/16(金) 00:00:22.47ID:???
普通はどうしてるの?
0788nobodyさん2012/03/16(金) 09:41:57.89ID:???
>>783
俺はまとめてるよ。
ログイン
リマインダー
新規会員登録
アフィリエイト機能とか。

うまく作れば使いまわし効く。
全部プラグインでやれるから
最近やることなくなった。
0789nobodyさん2012/03/16(金) 10:19:44.39ID:???
>>788
それらをプラグイン化して、サイトによってビューを修正する感じ?
0790nobodyさん2012/03/16(金) 10:41:05.32ID:pS4d35yu
ログイン状態のセッションが数時間で切れて困っています。
ログインすると
$this->Session->write('user',$user_id);
のようにコントローラ内のSessionに情報を保存していますが、これが数時間でread()しても値が取れなくなるようです。


core.php内で
Configure::write('Session.save','cake');
Configure::write('Session.timeout', (24*60*60*7));
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1000);
ini_set('session.cookie_lifetime', (24*60*60*7));
ini_set('session.gc_maxlifetime', (24*60*60*7));

Configure::write('Security.level', 'low');

としているので、1週間持って欲しいのですがダメみたいです。

何か方法はありますでしょうか。





0791nobodyさん2012/03/16(金) 20:57:57.62ID:???
>>789
具体的にいうと、
プラグインの中に
ビヘイビアと、コンポーネントを作る。

それをusercontrollerとmodelに読み込ませる感じ。
0792nobodyさん2012/03/16(金) 20:59:06.57ID:???
>>790
cookie使えばいいじゃん。
ses切れてても、cookieがあればそれでログインみたい。
0793nobodyさん2012/03/17(土) 00:04:22.68ID:???
>>791
なるほど。ビュー周りは特に変更しないんだね。
変更するならCSSをいじるぐらいか。
0794nobodyさん2012/03/17(土) 19:37:12.80ID:???
2.x対応のTreeHelperってないですか?
または修正版のサイトとかあれば
0795nobodyさん2012/03/19(月) 15:45:40.35ID:???
http://b.hatena.ne.jp/entry/anond.hatelabo.jp/20120318122617
これって結局安いの高いの
0796nobodyさん2012/03/19(月) 16:50:34.02ID:???
Qdmail(http://hal456.net/qdmail/)使ってるひといる?
さくらインターネットのメールサーバにQdmail使ってSMTP AUTHでメール送信してるんだけど、
何回か(4,5回が多い)に1回だけメール送れないんだよな

QdSmtp error: No Responce SYSTEM TIME OUT line -> 603
QdSmtp error: getMessage error line -> 543
QdSmtp error: Error From setting line -> 488
QdSmtp error: Send Data Error or Auth Error line -> 415
Qdmail error: Qdmail Version 1.2.6b ,PHP Version 5.2.11
Qdmail error: OS WINNT ; PHP Version 5.2.11 ; Qdmail version 1.2.6b
php.ini status: mb_language = Japanese ; mb_internal_encoding = UTF-8 ; mb_detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS
Qdmail Status debug: 0, log: 3, errorlog: 0
Qdmail error: No send . Because SMTP mail method replied error line -> 2190
Qdmail error: Send Error line -> 2115
Qdmail error: Error happen, see upper line -> 2194
Qdmail error: Send Error line -> 2115

画面にこんなエラーが吐き出されてメール送信されない。
エラー行だって言われてるところを見てもエラー行を出力する処理しか書いてなくて
どういうエラーが起こったのか全然わからない・・・。

同じような事になった人いないかな?
0797nobodyさん2012/03/19(月) 17:26:02.77ID:???
スレ違い
0798nobodyさん2012/03/19(月) 17:27:57.85ID:???
>>797
すまん、一応CakePHPのコンポーネントとして使ってるし、
Cake使ってる人でメール送信する人はこれ使ってる人多そうだからここで聞いてみた

PHP質問スレで聞いたが、そこでもスレ違いだとさ・・・。
ライブラリの質問できる場所無いみたいなんだよな
0799nobodyさん2012/03/19(月) 19:02:54.22ID:???
>>798
そうじゃなくて、ライブラリ自体、公式でサポートしてるんだから
そっち行けってことっでしょ。エラーメッセージすら読めてないし。
フレームワーク以前の問題だ
0800nobodyさん2012/03/20(火) 05:09:01.21ID:???
qdmailって、公式もサポートほとんどしてないだろあれ。
エラーメッセージもいいかげんだし。
0801nobodyさん2012/03/20(火) 09:47:42.67ID:???
>>800
わかる。
0802nobodyさん2012/03/20(火) 22:24:51.38ID:???
じゃ、qdmail使わずに自作しろよ。
メール送信なんて今まで作っていたのあるだろ。
0803nobodyさん2012/03/20(火) 23:14:24.46ID:???
・マルチバイト対応
・HTMLメール
・添付ファイル
こういうの対応しようとすると結構自作でやるのはな、、、
0804nobodyさん2012/03/21(水) 12:11:52.99ID:???
いやいや、普通に1000行もかからずコード書けるから。
フレームワーク使う前に作っていたものがあるだろ。それ使えよ。
0805nobodyさん2012/03/21(水) 18:27:13.50ID:???
cake使っててシェルでURLを組み立てたいときは何を使えばいいですか?
0806nobodyさん2012/03/21(水) 20:09:46.98ID:???
シェルでURLを組み立てたいって意味がわからないんだが
0807nobodyさん2012/03/21(水) 21:31:40.83ID:???
>>804
オレオレフレームワークつかっとけよw
0808nobodyさん2012/03/21(水) 23:19:44.62ID:ZAI6cSPi
$this->set('select', $this->Foo->find('list', array(//select要素
'fields' => array(
'Foo.id',
'Foo.firstname'
)))));
とすると、
$form->select("Foo.bar", array($select), 0, array('empty' => null))

select要素の中に
<option value="Fooのid">Fooのfirstnameの中身</option>
というのができるんですが、
これを
<option value="Fooのid">Fooのsecondnameの中身 Fooのfirstnameの中身</option>
としたいんですが、find('list')は一対でしか使えないんでしょうか?
やり方をご教示いただけたら幸いです
08098082012/03/21(水) 23:27:53.96ID:ZAI6cSPi
自己解決しました
allで読んで、
foreach ($select as $value) {
$talent_data[$value['Foo']['id']] = $value['Foo']['secondname'] . ' ' . $value['Foo']['firstname'];
}
$this->set('select', $select);
でlistで作ったoption群と同じ形式のリストデータが生成されました
0810nobodyさん2012/03/22(木) 00:13:00.01ID:???
modelにrule=>urlを書いたらurl欄が空欄もurlが正しくないになってしまうんですが、
urlが空でもよくて、入っていれば正しいURLか判定する、という風にするやり方がありましたらお教えください
0811nobodyさん2012/03/22(木) 00:20:23.77ID:???
allowEmpty
0812nobodyさん2012/03/22(木) 00:35:14.75ID:???
>>811
ありがとうございます、解決できました!
0813nobodyさん2012/03/22(木) 02:02:03.59ID:???
>>806
URLをTwitterに投稿するときに使おうと…
0814nobodyさん2012/03/22(木) 10:58:28.03ID:???
>>807
煽る意味がわからん。他人のライブラリは使えないと言い、
自分でも自作できないとかワガママすぎるだろ。
0815nobodyさん2012/03/22(木) 19:38:50.77ID:???
>>814
先に煽ったのは>>804じゃね
フレームワークスレで、自分で書いたもん使えて
0816nobodyさん2012/03/23(金) 00:01:31.13ID:???
おかしくないだろ。なんでも他人を頼ろうとするなよ。
自分でコンポーネントやヘルパー作れるようになってるんだから。
0817nobodyさん2012/03/23(金) 10:24:37.19ID:???
up
0818nobodyさん2012/03/23(金) 11:50:45.97ID:???
自分で簡単に組める人はここで質問しないだろ。自分が見落としてるだけで、他のいいモジュールがあるのかも?って淡い期待で書き込んでるんだとおもうよ。自分で組むしか方法が無い。っていう結論を貰えるだけでも嬉しいのでは?
0819nobodyさん2012/03/23(金) 13:36:50.00ID:???
なにかおかしくね?自分でプログラミングせずに、
いきなりフレームワーク使い出したというのか?
大体は参考書やらネットの情報やらで適当なプログラム作って、
慣れた後に効率化を求めてフレームワークを使い出すと思うんだが。
0820nobodyさん2012/03/23(金) 13:42:01.91ID:???
mail関数やmb_send_mail関数でメール送信しようとして
文字化けしたり、上手く送れなくてネットで調べながら
自分なりの「メール送信ライブラリ」を作ると思うんだが。

で、その後に添付ファイルやらHTMLメールやらを送信したくなって
qdmailのような他人が作ったライブラリを探すというのなら分かるよ。
でも、いきなり上記の部分すっ飛ばしてCake使って
「上手く動きません><」とか言われても、勉強不足以外の何者でもないだろ。
0821nobodyさん2012/03/23(金) 16:25:24.36ID:???
仲良くしようぜ。
0822nobodyさん2012/03/24(土) 15:01:00.43ID:oSWZUaYy
メール関連の機能が大幅に向上したバージョン2.1を使えばよい。
0823nobodyさん2012/03/24(土) 18:51:05.67ID:???
kwsk
0824nobodyさん2012/03/25(日) 01:08:52.69ID:???
paginatorでクエリを渡そうと思って
$paginator->options(
array('url' => array('?id=' . $id))
);
とやったんですが、
foo/?id=100/page~1
みたいなurlになってしまってうまく動作できません
foo/page~1?id=100
となるようにしたいんですが、optionsをどう書き換えたらいいんでしょうか?
0825nobodyさん2012/03/25(日) 19:19:28.98ID:???
>>824
array( '?' => array( 'id' => $id ))
って感じじゃなかったかな
0826nobodyさん2012/03/25(日) 23:49:03.03ID:???
Router::url(array('controller' => 'test', 'action' => 'index', 'id' => $id))

みたいな事をしてURLを生成しているのですが、
パラメータ部分を予め設定しておく事は出来ないのでしょうか?
0827nobodyさん2012/03/26(月) 08:08:50.35ID:???
>>826
ヘルパーでも作る
0828nobodyさん2012/03/26(月) 18:44:48.32ID:+fypSFER
フォームヘルパーを使って同じフォームを1ページの二カ所以上に作ると
formタグのidが重複しちゃうけど、どうやって回避するのがスマートかな
今はform->createでid指定して別名にしてるけど、あまりスマートに思えない
0829nobodyさん2012/03/26(月) 19:11:54.92ID:???
フォームヘルパーってぶっちゃけ要らない機能だよね
最初は便利なのかなと思ったけどしばらくいじって思い通りにいかないから
ないものとして普通にformタグ書くようにしたら能率上がったわ
0830nobodyさん2012/03/26(月) 23:14:30.50ID:???
>>829
確認の時どうしてるんだ?次のページに推移して「エラーがあります」か?
0831nobodyさん2012/03/27(火) 00:49:24.75ID:???
>>829
いや、使った方がいいよ。
俺もベタ書きやってたけど使わないとエラー処理が困る。
0832nobodyさん2012/03/27(火) 01:42:43.77ID:J3nZuwJg
バリデーションエラー時に普通の方法だと
エラーが出たフォームの上(下だっけ?)にメッセージが表示されるけど
任意の場所に表示したい場合はどうしてる?
0833nobodyさん2012/03/27(火) 03:37:14.44ID:???
<?php echo $form->error('Post.name')?>
0834nobodyさん2012/03/27(火) 14:05:24.25ID:???
CakePHPで「INSERT〜ON DUPLICATE KEY UPDATE」
は使えないのでしょうか?使える場合は書き方を押してください
0835nobodyさん2012/03/27(火) 14:37:07.94ID:???
CakePHPの質問を書いたら、ちゃんと答が返ってくる掲示板ないでしょうか
0836nobodyさん2012/03/27(火) 17:57:15.57ID:???
>>835
cakephpのコミュニティで質問すれば。
http://cakephp.jp/modules/newbb/index.php
0837nobodyさん2012/03/27(火) 18:30:51.02ID:???
>>834
Model -> save()
0838nobodyさん2012/03/28(水) 22:39:25.33ID:???
設計って結構迷うよね・・。

編集でidが2つある場合、URLが/post/edit/1/2
みたいになるけど、これってわかりづらいよね。
ピュアPHPの、edit.php?parent_id=1&id=2の方が分かりやすい気がする。
まぁ、Cakeでは/edit/parent_id:1/id:2 というURLにはなるんだけどさ・・・
0839nobodyさん2012/03/28(水) 22:40:41.18ID:???
>>838
ID=一意に表すもの
だし1つで表せないとしたらそれはIDじゃない
1つで表せるならURLに含ませる必要ない
0840nobodyさん2012/03/28(水) 23:05:18.11ID:???
>>839
別々のものに同じidが割り振られているのはおかしいが、
ひとつのものに二つ以上のidが振られているのは問題なくね?
0841nobodyさん2012/03/28(水) 23:10:52.27ID:???
>>840
問題ないけど、2つ持たせる意味がわからないし、
仮に持たせたとしてもそれをURLに含ませる意味もわからない
0842nobodyさん2012/03/28(水) 23:15:51.51ID:???
>>841
管理画面があったとして、
ユーザID・1が投稿したお知らせのID2を見たいとする。

ピュアPHPなら、edit.php?user_id=1&id=2だよな?
Cakeなら/edit/1/2か/edit/user_id:1/id:2だな。
セッションに含めて持ち回る方法もあるけど、
毎回セッションに入れるのはおかしくないか?って思うからさ。
0843nobodyさん2012/03/28(水) 23:24:56.61ID:???
edit.php?id=2
じゃだめなの?
0844nobodyさん2012/03/28(水) 23:32:10.02ID:???
ピュアPHPだとそれで良いんだよ。でもCakeだと迷うだろ?
Cakeの書き方で言えば、
/news/add/1  この1はuser_idの1
/news/edit/2  この2はidの2
URLを見ただけでは混乱する
0845nobodyさん2012/03/28(水) 23:46:26.83ID:???
POSTすりゃええやん
0846nobodyさん2012/03/28(水) 23:58:08.70ID:???
迷うだろって言われても迷わないよな
0847nobodyさん2012/03/28(水) 23:59:20.33ID:???
>>846
ほんとに?自分だけで分かるからOKって考え方なの?
ちなみに、/edit/1/2みたいな書き方はBaserCMSでもやってた
0848nobodyさん2012/03/29(木) 00:03:50.49ID:???
自己レスだけど、コーディング時は迷う事はないか。
Router::url('/news/edit/' . $data['Newsr']['userid'] . '/' . $data['News']['id'])
になるわけだし。単なるURL上での事ならこだわる必要ないかな。
外部に公開するわけでもないし。
0849nobodyさん2012/03/29(木) 00:06:24.29ID:???
>>847
自分だけわかるもくそも、URLの規則を万民にわかるように書くことなんてそもそも無理じゃね?
0850nobodyさん2012/03/29(木) 00:14:21.30ID:???
>>849
そうだな。規約に従おうとこだわりすぎてたわ。
自分が作りやすい方法でやるよ。色々ありがとう
0851nobodyさん2012/03/29(木) 00:19:24.06ID:???
>>850
URLでなんのページかわかりやすくしようというのは、ユーザビリティの面からも正しい考え方だけど
この件に関しては>>844の書き方で充分わかりやすいといえる範疇だと思う
0852nobodyさん2012/03/29(木) 04:02:59.81ID:???
>ピュアPHPなら、edit.php?user_id=1&id=2だよな?
>Cakeなら/edit/1/2か/edit/user_id:1/id:2だな。

誰がこんなこと決めたの?
Cakeだって/edit?id=1&id=2ってやるだろ。
0853nobodyさん2012/03/29(木) 10:57:51.78ID:???
さすがにそれはやらない
0854nobodyさん2012/03/29(木) 22:50:57.56ID:???
/edit/parent_id/1/id/2 とか
0855nobodyさん2012/03/29(木) 23:14:23.59ID:???
user_idがidから引っ張ってこれるんならURLに含めないな
usernameなら/news/tanaka_ichiro/123みたいな感じで含めてもいいと思うけど
どうしてもuser_idもidも含めたいのならnamedパラメータ使って/news/user_id:1/id:2とかにする
0856nobodyさん2012/04/01(日) 00:45:58.67ID:OiSFrCKx
ブラウザのエンコードの切替ができないんだけど2.x系って特別な設定あるのかな?

1.x系の場合コントローラに
function beforeFilter(){
//携帯なら
if($this->Ktai->is_ktai()){
Configure::write('App.encoding', 'SJIS');
$this->layout = "mobile_layout"; //charset=shift_jis"
}else{
って書けばブラウザのエンコードが既存の「UTF-8」から「SJIS」に切り替わるのに2.x系だと「UTF-8」のまんまだ。。。
かなり嵌ってるんだけど分かる人いるかな?
てか俺の環境がおかしいのかな??
0857nobodyさん2012/04/01(日) 02:38:57.47ID:???
App.encodingってシステム的なエンコードの設定で、出力のエンコードとは関係ないんじゃないの
設定したことないから知らないが
ヘッダーはutf8とsjisどっちなの?
■ このスレッドは過去ログ倉庫に格納されています