トップページ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/
0703nobodyさん2012/02/25(土) 18:19:28.48ID:???
>>702
ベタに書いてもOKな気もすっけど。。
とりあえず、Fileクラスもあるし。
0704nobodyさん2012/02/25(土) 18:21:48.77ID:???
>>703
のちのちワードを編集するので、直書きはできないんです
fileクラスについても調べてみます
0705nobodyさん2012/02/25(土) 22:48:10.62ID:???
1.3.14を使っています。フォームのバリデーションで質問です。
ラジオボタンの場合、項目を選択せずに送信すると
空データではなく、存在しないものとして扱われます。

ですので、バリデーションルールでnotEmptyを指定しても
正しく機能しないのですが、どうすればいいのでしょうか?
0706nobodyさん2012/02/26(日) 13:38:17.41ID:???
hidden
0707nobodyさん2012/02/26(日) 14:15:41.40ID:???
156
0708nobodyさん2012/02/26(日) 16:50:00.76ID:???
>>706
ありがとうございます。勉強になりました。
0709nobodyさん2012/02/27(月) 01:32:01.91ID:???
>>697
Model::paginateCount を 軽い処理で実装するとか
0710nobodyさん2012/02/28(火) 11:46:10.73ID:???
>>697
where句に使用しているカラムにインデックスはるとか、
joinしてるなら、その辺も確認したほうがいい。
0711nobodyさん2012/02/28(火) 15:16:02.31ID:pz8Lp3oa
[動作環境]CakePHP 2.0.6 / PHP 5.1.6 / Apache 2.2

ルーティングで躓いています。
以下のようなコントローラを用意しました。

class EntryController extends AppController {

var $name = "Entry";
var $autoRender = false;

function index(){
die('index');
}

function success(){
die('success');
}
}

http://example.com/entry/
は正しく実行され、'index'が表示されるのですが、
http://example.com/entry/success/
は、Segmentation faultが発生し、Abortします。

routes.php などの設定は、敢えて変更せず使用しています。
同じような現象を経験した方、いらっしゃいますか?(そもそも、2.0.6使っている人いるんだろうか)
0712nobodyさん2012/02/28(火) 15:21:47.73ID:???
success以外でも一緒?
また、http://example.com/entry/index は表示される?
0713nobodyさん2012/02/28(火) 15:25:44.20ID:pz8Lp3oa
>> 712
success以外でも一緒です。
/entry/index もダメです。
/entry/index/abc/def もダメです。
0714nobodyさん2012/02/28(火) 16:50:04.76ID:???
>>711 です。

Router::parse($request->url);
の結果を見ると、以下のようにルーティングが間違っているようです。
array(5) { ["controller"]=> string(7) "success" ["named"]=> array(0) { } ["pass"]=> array(0) { } ["action"]=> string(5) "index" ["plugin"]=> NULL }
Routerがちょっと怪しいので、調べてみます。
0715nobodyさん2012/02/28(火) 17:13:46.37ID:???
>711 です。
/lib/Cake/Network/CakeRequest.php に、おかしな箇所を見つけました。
下記引用の下から5行目、「$baseUrl」なんですが、どこでも宣言されていないのでif自体に意味がないようです。


protected function _base() {
$dir = $webroot = null;
$config = Configure::read('App');
extract($config);

if (!isset($base)) {
$base = $this->base;
}
if ($base !== false) {
$this->webroot = $base . '/';
return $this->base = $base;
}

if (!$baseUrl) {

//★ここを改編したらうまくいった
//$base = dirname(env('PHP_SELF'));
$base = '';
0716nobodyさん2012/02/28(火) 21:52:15.32ID:???
>>715
ソース見てみたけど確かに$baseUrlはどこでも値が入ってないね
0717nobodyさん2012/02/29(水) 02:33:19.83ID:???
1.3系でプラグインの作成方法について質問します。

公式のマニュアルを見ているのですが、
/pizza/pizzaOrders/index
でアクセスする方法は分かるのですが、
/pizza/
でアクセスするにはどうしたら良いのでしょうか?

普通に/app/controllers/pizza_controller.phpを作ればいいと思ったのですが、
作ってもアクセスエラーになります。
これってルーティングの設定になるのでしょうか?
0718nobodyさん2012/02/29(水) 08:54:37.66ID:???
>>709
1000件しか表示しない!って決めたら、
function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
  return 1000;
}
こうしてもいいんですかね?
0719nobodyさん2012/02/29(水) 15:57:45.32ID:OuUO3AKR
>>717
プラグイン関係ない
ルーティングの問題
0720nobodyさん2012/02/29(水) 16:49:35.18ID:???
>>719
了解しました。ルーティングで調節します。
0721nobodyさん2012/02/29(水) 21:04:59.32ID:???
>>717
/app/plugin/pizza/controllers/pizza_controller.php
(要するにプラグイン名と同名のコントローラー)を作って、indexアクションを作れば
ルーター触らなくても/pizza/でアクセス可能だよ。
0722nobodyさん2012/02/29(水) 21:19:59.68ID:???
>>721
出来ました!勉強になります。ありがとうございました
0723nobodyさん2012/03/01(木) 05:51:29.65ID:???
モデルって別にテーブル名じゃなくても良いんだね
同じのでもサイトのコンテンツによって変えてる
0724nobodyさん2012/03/05(月) 10:09:01.94ID:???
2.1 Stableキター
つうかペース早いな
0725nobodyさん2012/03/05(月) 19:23:27.93ID:???
うおおおお
公式サイトも変わってCookBookもなんか綺麗になったー

マイグレーションガイドによると.htaccessの変更が必要という、
アップグレード時に見落としがちな変更があるのにリリース文では触れられてないな・・・
http://book.cakephp.org/2.0/en/appendices/2-1-migration-guide.html
http://bakery.cakephp.org/articles/lorenzo/2012/03/05/cakephp_2_1_0_just_landed
0726nobodyさん2012/03/05(月) 20:11:55.24ID:???
まだ開発中なんだけど、バージョアップすべきなのかな?
0727nobodyさん2012/03/05(月) 20:59:06.49ID:???
リリースしてないならageた方がいいと思う
2.0.xは今までのバージョン系列で一番寿命が短いし、下手したら1.3.xより今後のアップデートが期待できない気がする
0728nobodyさん2012/03/05(月) 23:06:32.47ID:???
>>727
ありがとう。
2.0.x系からならフレームワーク置き換えだけでいいのかな。
0729nobodyさん2012/03/05(月) 23:42:52.00ID:WIGrArNU
>>728
自分の一つ上のレスも見ようぜ!
0730nobodyさん2012/03/06(火) 01:02:47.42ID:???
次の開発案件から2.0系にしようとしてたら、もう2.1・・・。
2.0系は結局書籍も出ずじまいか。
0731nobodyさん2012/03/06(火) 03:40:14.04ID:???
互換性をきっちりしてくれないと困るにょ
0732nobodyさん2012/03/06(火) 21:43:10.65ID:???
>>727
ありがとう。
出来ました(゚ω゚)
0733nobodyさん2012/03/06(火) 22:01:24.25ID:???
2.0リリースが10月半ばだったから5ヶ月経たずに2.1出たのか
2.0は短命だったね・・・
本が出ないのもしょうが無いというか、出してしまっていたらすごい中途半端なタイミングになっていたと思う


1.2 2008/12
1.3 2010/04
2.0 2011/10
2.1 2012/03
0734nobodyさん2012/03/06(火) 23:43:25.94ID:???
Cakeにcreate tableする関数はありますか?
普通にqueryでベタSQL投げないと駄目?
0735nobodyさん2012/03/07(水) 18:16:47.78ID:???
お前らなんか言えよ
0736nobodyさん2012/03/07(水) 22:24:25.29ID:???
お前らがcakeで作ったもので、何を最大どのくらいの期間かかった?
俺はSNSで3ヶ月。
0737nobodyさん2012/03/08(木) 08:15:28.96ID:???
官公庁のシステム
2ヶ月3000万円
0738nobodyさん2012/03/08(木) 09:50:17.49ID:???
>>737
まじかよ。
あぁいう国の案件はどうやって仕事もらうの?

みんなやりたいよね。
0739nobodyさん2012/03/08(木) 10:16:55.80ID:???
てか、2ヶ月って凄いな。
国のシステムだからそんなに凝ったことはしてないだろうけど、
どんな機能があって2ヶ月なんだろ?

0740nobodyさん2012/03/09(金) 11:27:56.60ID:???
犯罪の香りがする
0741nobodyさん2012/03/09(金) 11:43:23.36ID:???
随意契約くさいな
0742nobodyさん2012/03/09(金) 12:57:11.13ID:???
2.0から始めたいのにマニュアルが英語しかないとかwww
0743nobodyさん2012/03/09(金) 13:13:11.92ID:???
英語英語うるせーよ、このスレ小卒ばっかりか?
0744nobodyさん2012/03/09(金) 14:27:27.18ID:???
お前は英語で書けよ
0745nobodyさん2012/03/09(金) 16:18:01.14ID:???
speak english or die
0746nobodyさん2012/03/09(金) 16:24:51.22ID:???
shine!
0747nobodyさん2012/03/09(金) 16:51:22.89ID:???
dieとかwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
エイリアス使ってるバカってまだいたんだwwwwwwwwwwww
0748nobodyさん2012/03/09(金) 16:54:34.34ID:???
fack you!
0749nobodyさん2012/03/09(金) 17:40:19.41ID:???
OUTA MY WAY, WTF!!!!!!!!!!
0750nobodyさん2012/03/09(金) 17:54:30.33ID:???
アソシエーションするとき、プライマリキー以外とforeignKeyで
繋げるにはどうすればいいのでしょうか?
0751nobodyさん2012/03/11(日) 02:18:22.14ID:???
そんなことより誰か複合主キーに対応するためのプラグインを書けよ。な?
0752nobodyさん2012/03/11(日) 10:46:34.94ID:???
ビュー内の$this->Paginator->prev()とかnumbers()で吐き出されるリンクに
PHPSESSIDをくっつけたい(?PHPSESSID=hoge)んだけど、どうしたらいいかな

コアの$html->link()を書き換えたりしたらいけそうだけど、
もっとスマートな方法ある?
0753nobodyさん2012/03/11(日) 11:29:49.63ID:???
>>752
自己解決
'options' =>
array(
'?' => array(session_name() => $this->Session->id())
)
こうした
0754nobodyさん2012/03/11(日) 16:36:31.78ID:???
ソース追ったけどよくわからなかったので質問します。
CakePHPでのCookieを書き込む際に暗号化したデータをJavaScriptで復号するロジックはありますか?
0755nobodyさん2012/03/11(日) 22:15:13.63ID:+TvrXerP
うるせぇ!
いいからCakePHPで複合主キーに対応する為のプラグインを誰か書けや。
な?
0756nobodyさん2012/03/11(日) 23:31:02.18ID:???
>>754
ソース見る限り、Security::$typeで設定した暗号方式でSecurity.salt使って
それをbase64_encodeして暗号化してるっぽいので
それを逆に処理すればJavascriptでも復号化できると思う。
詳しくはcookie componentのソース見て。

だけど、複合に必要なキーのSecurity.saltをJavascriptに
書かないといけないので、そもそもなんで暗号化したんだって
ことになるので設計を見なおしたほうがいい。
0757nobodyさん2012/03/12(月) 00:06:16.05ID:uEcRtOSh
>>754
老婆心ながら、>>756が言っていることを強調しておく。
設計を見直せ。salt の意味がない。
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使わずに自作しろよ。
メール送信なんて今まで作っていたのあるだろ。
■ このスレッドは過去ログ倉庫に格納されています