【PHP】フレームワーク CakePHP 9ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/07/23(金) 09:13:26ID:v3m09M9uCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>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
0118nobodyさん
2010/08/05(木) 03:16:57ID:???http://d.hatena.ne.jp/ruby-U/20090618/1245332725
このあたりのhtaccessのmod_rewriteで勝手にパラメーターがデコードされてるのが原因なのかな
0119nobodyさん
2010/08/05(木) 03:30:02ID:???1. /hoge hoge -> hoge hoge
2. /hoge%20hoge -> hoge hoge (スペースをエンコード)
3. /hoge+hoge -> hoge hoge
4. /hoge%2Bhoge -> hoge hoge (+をエンコード)
5. /hoge%252Bhoge -> hoge+hoge (+を二回エンコード)
挙動としておかしいのは4と5で、それぞれ本来はhoge+hogeとhoge%2Bhogeが得られるはずなんだよな
一回余計にデコードされてる
0120118,119
2010/08/05(木) 16:02:35ID:nxLYetG6index.phpに渡った時点で>>119のデコードが確認できた
なので、これはcakeの問題と言うより>>118に書いたようにhtaccessの仕様のようだね
1. 最初にapacheがデコードして、mod_rewriteで/index.php?url=hoge+hogeとして解釈される
2. GETパラメーターでは+はスペースの代わりに使われるので、$_GET['url']の中身はhoge hogeになる
さらに/について
%2Fをパラメーターとして渡すと区切り文字として扱われてしまうのは>>114にも書かれているとおり
1. /hoge/hoge/hoge
2. /hoge/hoge%2Fhoge (1回エンコード)
3. /hoge/hoge%252Fhoge (2回エンコード)
のすべてのパターンで$_GET['url']の中身がhoge/hoge/hogeになってしまう
hoge/hoge%2Fhogeとして受け取りたい場合には
4. /hoge/hoge%25252Fhoge
と3回エンコードしないといけない
ちなみにallowEncodedSlashesがonじゃない場合は2は404になるけど、1
0121nobodyさん
2010/08/05(木) 16:07:11ID:???ちなみにallowEncodedSlashesがonじゃない場合は2は404になるけど、1、3、4の挙動は同じ
これらに関してスマートな解決方法は思いつかないので、誰か他の人にパス
0122nobodyさん
2010/08/08(日) 18:03:07ID:???0123nobodyさん
2010/08/08(日) 18:11:12ID:???0124nobodyさん
2010/08/08(日) 19:11:13ID:???0125nobodyさん
2010/08/08(日) 22:19:24ID:???まったく話題にならないけど、このバグで困っている人いないの?
0126nobodyさん
2010/08/08(日) 22:47:28ID:???windows7上で開発してる人は少ないだろうし、fopenも滅多に使わないだろうから、
あんまり遭遇する人がいないんじゃない
0127nobodyさん
2010/08/08(日) 22:58:49ID:???0128nobodyさん
2010/08/08(日) 23:35:31ID:???Vistaでもエラーでるんだよ
fopenはキャッシュ読み込む時に使われているから、キャッシュの機能を意図的にオフに
しないかぎり、勝手に呼び出されるよ
本番環境はlinuxだから、linuxで発生しないって確証があれば気にはしないんだけどさ
0129nobodyさん
2010/08/08(日) 23:54:58ID:???0130122
2010/08/09(月) 00:18:49ID:???fixtureにAテストのためにテストデータ追加すると、Bテストではエラーがでる、つまり
データの整合性をfixture上で取るのが面倒だが、みんなどうやっているのかなと。
0131nobodyさん
2010/08/09(月) 00:26:35ID:???本番環境では今のとこエラーは出てないよ
でも、それがlinuxではエラーが出ないって保証にはならんでしょ?
原因が特定されないと気持ち悪い
0133nobodyさん
2010/08/09(月) 04:02:03ID:???0134nobodyさん
2010/08/11(水) 23:32:47ID:???http://blog.livedoor.jp/loopus/archives/50214076.html
ここで
>$data = $this->Uriage->findAll(('1 = 1 group by customer_id', 'customer_id, sum(price) as "Uriage.sum_price"')
>
>という書き方をすると
>
>$data[x]['Uriage']['customer_id']
>$data[x]['Uriage']['sum_price']
>
>とキレイに入ってくれる。
というやり方が書かれているのですが、1.3だと as "Uriage.sum_price"とするとSQLエラーが出てしまいます
0135nobodyさん
2010/08/12(木) 09:45:53ID:???よめ
http://book.cakephp.org/ja/view/1608/Virtual-fields
0136nobodyさん
2010/08/12(木) 10:21:52ID:???うちで使っている糞鯖にファイルアップするだけでも、だいぶ時間がかかる
0138nobodyさん
2010/08/12(木) 14:49:01ID:???フォークして、自前でカスタマイズする。
もしくは、もうやっているとともうけど、lnしてひとつにまとめておく…とか。
0139nobodyさん
2010/08/13(金) 00:02:04ID:???固めてあげろ
0140nobodyさん
2010/08/13(金) 05:51:38ID:tji6Fsyn配布されている絵文字のライブラリを使おうと思っています。
こういう「DB使わないし、一部PHPのライブラリを使うだけ」
と言った状態でも、Cakeを使う事で幸せになれるでしょうか?
0141nobodyさん
2010/08/13(金) 06:27:42ID:???いいえって返ってくれば使わないでおこうと思ってたんなら、
君には恩恵は少ないと思うから使わなくていいと思う。
0142nobodyさん
2010/08/13(金) 06:40:41ID:???人それぞれなんて言ったら、すべて人それぞれで終わりだろ。
0143nobodyさん
2010/08/13(金) 08:56:35ID:???0144nobodyさん
2010/08/13(金) 10:06:54ID:???0145nobodyさん
2010/08/13(金) 10:54:57ID:???どんな要件にも人それぞれって回答したら済む。
0147nobodyさん
2010/08/13(金) 11:44:43ID:???0149nobodyさん
2010/08/13(金) 11:48:59ID:???0150nobodyさん
2010/08/13(金) 12:21:38ID:???くだらないレスするくらいなら、ちゃんと質問に答えてやれよ
>>140
Cake専用の絵文字ライブラリなんてあったっけ?
Ktai Library for CakePHPなら単体でも動作したはずだよ
0152nobodyさん
2010/08/13(金) 12:33:28ID:???0153nobodyさん
2010/08/13(金) 12:41:08ID:???「人それぞれ」って回答が一番糞だろ。無駄レス以下だ
0154nobodyさん
2010/08/13(金) 12:49:51ID:???知らないんじゃなくて、人それぞれとしか言いようがないっていうことでしょ
>>140が人それぞれじゃないと思うのなら、自分で>>140にレスすればいい
他に誰も>>140に答えられなかったら「人それぞれ」が正解になるだけ
0155nobodyさん
2010/08/13(金) 12:56:33ID:???いや、普通に>>150が答えてるじゃん。
俺でも「一部だけ使うならフレームワーク使わなくても良いんじゃないか?」
って書くな。
で、そう思ってスレ見たら>>141とかふざけたこと
書いてあったから気になっただけだ。これ言ったらどうしようもねーだろ
0157nobodyさん
2010/08/13(金) 12:59:41ID:???どこがどう「ふざけた回答じゃない」だ?何も解決できないじゃん。
「昼飯何食えばいい?」って質問に「好きな物食えばいいよ」って答えるようなもん。
0158nobodyさん
2010/08/13(金) 13:01:49ID:???エスパーじゃないんだから、あなたにはこれとこれとあとこれも有用です。
したがってCakePHPを使いなさいって答えられないよ
0159nobodyさん
2010/08/13(金) 13:03:50ID:???俺は>>136を書いたけど、適当につぶやいたつもりが
普通にレスしてくれてたし。で、意見書こうと思ったらこれだ。
単に>>141は天の邪鬼なだけだろ。
0160nobodyさん
2010/08/13(金) 13:03:53ID:???おいおいwww
「昼飯何食えばいい?」
実にどうでもいい質問だな。それこそ人それぞれでおk
お前はなんて答えてあげるんだい?ww
0162nobodyさん
2010/08/13(金) 13:09:36ID:???ちょとおちつけよ
>>140の質問者はKtai Libraryなんて一言も書いてないぞ。
それでなんで「一部だけ使うならフレームワーク使わなくても良いんじゃないか?」
の回答に直結するんだ?CakePHP用に作られたプラグインやらライブラリが
すべてCakephpなしに動くなら君は正しいよ。そうじゃないだろ?
それとも何か?回答者はわざわざ行間読んでKtai Libraryにたどり着き回答する必要があるのか?
求めすぎだろ。頭ひやせ
携帯サイト用のライブラリーやプラグインはいくつかあるんだぞ
0163nobodyさん
2010/08/13(金) 13:10:51ID:???0164nobodyさん
2010/08/13(金) 13:11:35ID:???待て待て。Ktai Library云々の話を持ち出すまでもなく
「一部で使うだけなら、CakePHPの恩恵が得られない」
と言う意味での>>155は別におかしくねーだろ。
逆におかしいと思ってもお前が判断するような事じゃねーよ
0165nobodyさん
2010/08/13(金) 13:13:28ID:???0167nobodyさん
2010/08/13(金) 13:15:24ID:???0169nobodyさん
2010/08/13(金) 13:21:40ID:???0170nobodyさん
2010/08/13(金) 13:43:23ID:???期待する回答がもらえなかったら、もうちょっと詳しく
事例の説明をして、もう一回回答をもらおうとするのが
普通の質問者のスタイルじゃないか?
それを一回自分の期待する回答が得られなかったからといって
あまのじゃくだの何だの言うのなんて、質問者の立場が
わかってないとしか思えない
俺なんて質問してもレスさえもつかなくて、自分で
他人のふりして回答を書き込むのがしょっちゅうなんだぞ
見ず知らずの他人が金ももらわずに回答するんだから、
レスがついただけでもありがたく思わなきゃ
0172nobodyさん
2010/08/13(金) 15:27:44ID:???適当にテーブル作ってbakeしたら、それだけでそこそこのサイトは完成する
0173☆忍者Perl☆ ◆M5ZWRnXOj6
2010/08/13(金) 23:36:15ID:LkLBXJmk頭湧いてるバカばっかりwwwwwwwwwwwww
(笑)(笑)(笑)(笑)(笑)(笑)(笑)
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
(笑)(笑)(笑)(笑)(笑)(笑)(笑)(笑)
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
だからなめられんだよクソwwwwwwwwwwwwwwwwwwwwww
0174nobodyさん
2010/08/14(土) 00:23:57ID:???PHPerって半数くらいはPerlもできるだろ
0175nobodyさん
2010/08/14(土) 01:17:12ID:???3テーブルあります。
購入履歴(Histories)テーブル:id、fruit_id、user_id
果物(Fruits)テーブル:id、producer_id
生産者(Producers)テーブル:id、rank(A、B、C、D・・・)
下記のようなbelongsToの設定をモデルにしてあります
(要するに多階層のbelongsToです)
History:belongsTo=Fruits
Fruit:belongsTo=Producer
recursive=2でHistoryモデルからfindする際、
「Producer.rank='B'」
を条件に指定したのですが、belongsToで下位の階層のカラムを条件に指定することは
可能なのでしょうか?
上記条件を指定すると「Unknown column」となります。
なお条件を指定しない場合、きちんと2階層目までのデータは取得できています。
0176nobodyさん
2010/08/14(土) 01:36:15ID:???条件指定してない時には正しくデータがとれてると言うことは
アソシエーション自体は正しいから、conditionsが間違ってるっぽいな
発行したSQL文かconditionsの内容書いてみ
0177175
2010/08/14(土) 02:04:35ID:???1.SELECT `History`.`id`, `History`.`fruit_id`, `History`.`user_id`, `Fruit`.`id`, `Fruit`.`producer_id` FROM `histories` AS `History` LEFT JOIN `fruits` AS `Fruit` ON (`History`.`fruit_id` = `Fruit`.`id`) WHERE 1 = 1
2.SELECT `Fruit`.`id`, `Fruit`.`producer_id` FROM `fruits` AS `Fruit` WHERE `Fruit`.`id` = 1
3.SELECT `Producer`.`id`, `Producer`.`rank` FROM `producers` AS `Producer` WHERE `Producer`.`id` = 1
4.SELECT `Fruit`.`id`, `Fruit`.`producer_id` FROM `fruits` AS `Fruit` WHERE `Fruit`.`id` = 2
5.SELECT `Producer`.`id`, `Producer`.`rank` FROM `producers` AS `Producer` WHERE `Producer`.`id` = 2
結果は
Array(
[0] => Array(
[History] => Array(
[id] => 1
[fruit_id] => 1
[user_id] => 1)
[Fruit] => Array(
[id] => 1
[producer_id] => 1
[Producer] => Array(
[id] => 1
[rank] => A)))
[1] => Array(
[History] => Array(
[id] => 2
[fruit_id] => 2
[user_id] => 1)
[Fruit] => Array(
[id] => 2
[producer_id] => 2
[Producer] => Array(
[id] => 2
[rank] => B))))
0178175
2010/08/14(土) 02:06:46ID:???多階層のJOIN文を作成して1度でデータを取得していると思っていたのですが、
1階層目までしかJOINせず、その先は個別にデータを取得してるみたいです。
このような分割をされると、下位の階層のカラムを条件で指定するのは無理ですね・・・。
0179175
2010/08/14(土) 02:07:50ID:???0180176
2010/08/14(土) 03:18:02ID:???belongsToでも2階層先はSQL分割されちゃうのか
なんなら
Fruit hasMany History
Fruit belongsTo Producer
にして
$this->Fruit->find('all', array('conditions'=>array('Producer.rank'=>'B')))
とかにしたらどうかね
ちょっと酒入っているので自信がないが
0181175
2010/08/14(土) 03:51:18ID:???ありがとうございます。
今回例に出したのは2階層なんですが、実は4階層のケースでどうしようか悩んでいるのです・・・。
ちなみにお教え頂いた
「特定のモデルを中心に、hasManyとbelongsToを使って上下1階層(合計2階層)を取得する」
方法は成功しました(SQLは2文、条件指定も可)。2階層までならこの方法でいけますね。
今回のような2階層以上のデータの芋づる取得はそんなに多いケースではないので、
とりあえずMySQL上に多段JOINしたViewを定義して、そのView用のmodelを使用しようと思います。
0182nobodyさん
2010/08/14(土) 08:00:26ID:???0183Perl Assasin ◆lNsIJTdtUY
2010/08/14(土) 08:14:48ID:ExEQpWlEそろそろうざいわ
言っとくけど俺をあまりナメないほうがいいよ
VIPでコテハンやってるしクソコテ潰すくらいの影響力は持ってるから
くだらないことで刺激して後悔しないようにね
0184nobodyさん
2010/08/14(土) 11:53:15ID:???今まではモデル内でセッション使えなかったようですが、1.3からできるかもとの情報が。
しかし、試してみたところ、上手く行きませんでした。。
参考記事
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1989&forum=6
0185176
2010/08/14(土) 13:11:08ID:???http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1114&forum=6
ググったら明示的にJOINする方法があった
0186▲☆◎Perl忍者◎☆▼ ◆M5ZWRnXOj6
2010/08/16(月) 19:25:14ID:m+WY7Mxd死んでくれない?(笑)
0187nobodyさん
2010/08/16(月) 19:30:06ID:???0188nobodyさん
2010/08/16(月) 21:41:13ID:???0189nobodyさん
2010/08/17(火) 22:14:24ID:ZhW5Etfnゴミはコントローラの処理後、ビューの処理前に入っているようです。
コントローラの処理とビューの処理の間に入りそうな処理は何がありますか?
念のため、phpの閉じタグ?>はソースの末尾に入れないようにしていますが、漏れがあるのでしょうか。
0190nobodyさん
2010/08/17(火) 22:23:45ID:ZebP+0w7wysiwygエディターを使うことになりまして、
どれを使って良いのかわからないので、ご教授頂きたいのですが。
機能としては、文字の修飾、画像の貼り付け(できればローカルPCからダイレクト)が出来れば良いと考えております。
ライセンスは無償でフリーがベストです。
何か良い情報をお持ちの方、よろしくお願いします。
0191nobodyさん
2010/08/17(火) 23:02:01ID:???PHPの閉じ忘れくらいしか思いつかんな
あとはapp_controllerあたりか
コンポーネント、ヘルパーとかを読まないプレーンなコントローラーを作って空白入るか確認した?
0194nobodyさん
2010/08/18(水) 05:14:05ID:???CentOS 5.4
Htmlヘルパーのcssを使ってcssの指定をしていますが
http://xxxx.xxxx/test でアクセスするとcssが正しく反映されるのですが
http://xxxx.xxxx/test/ でアクセスしたり
http://xxxx.xxxx/test/regisger などでアクセスすると、cssが反映されません。
指定は、普通に$html->css('sample');のように行っており、
いずれの場合も出力されたソースを見ると
<link rel="stylesheet" type="text/css" href="css/sample.css" />
と返ってきています。
cssファイルはapp/webroot/cssに置いています。
どうすれば正しく反映されますでしょうか。
0196nobodyさん
2010/08/18(水) 10:02:29ID:???本来なら
<link rel="stylesheet" type="text/css" href="/css/sample.css" />
ってなるはずだから自分でどっか弄ったんだろ?
Cakeのバグじゃなさそうだから、自分でコード追って解決しろよ
0197nobodyさん
2010/08/18(水) 11:21:26ID:???見てみました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /testtest/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
>>194は間違いで、URLは
http://xxxx.xxxx/testtest/test/
みたいな感じで、testtestがサブディレクトリ名で、testがコントローラ名です。
RewriteBase /testtest/app/webroot/
RewriteBase /testtest/app/
等も試してみましたが、結果は同じでした。
>>196
cakeの下はいじってないです。
とりあえず
$html->css('/css/sample');
としてみると
<link rel="stylesheet" type="text/css" href="/css/sample.css" />
が返ってきましたが、やはりcssは反映されませんでした。
0198nobodyさん
2010/08/18(水) 11:58:04ID:???このへん
http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=thread&topic_id=272&forum=2&post_id=787
0199nobodyさん
2010/08/18(水) 12:25:14ID:???bootstrap.phpに定数書いて参照させる方が確実だぞ
define('WEBROOT_URL', 'http://localhost/');
<link rel="stylesheet" type="text/css" href="<?php echo WEBROOT_URL;?>sample.css" />
みたいにさ。俺もaリンクもこれでやってるよ。
0201nobodyさん
2010/08/18(水) 13:10:08ID:???定数の件はまあ好みだから良いとして、
ヘルパー使わない事をアホだと言われるのは違うと思うがな。
お前みたいに自分だけで開発してて
パフォーマンスも気にしないような奴なら使えばいいよ
0202nobodyさん
2010/08/18(水) 13:21:16ID:???0203nobodyさん
2010/08/18(水) 13:23:44ID:???速度的にきになるなら別のところで対処しろよキャッシュしとくとかさぁ
Cakeのスレでヘルパー使うの否定して、独自定数定義しろってまずおかしいだろw
てかフレームワーク使ってる意味なくね?
0204nobodyさん
2010/08/18(水) 13:26:50ID:???俺が馬鹿なのかと思ってググったら、
同じ事やっている奴いっぱいいるんだが。
別にRouter::url()で表示しても良いだろうが、
そこまで突っ込んだり馬鹿にしたりする事か?
ヘルパーにしても使わない方がパフォーマンスするのは公式の通りだし、
テンプレもわかりやすいだろ。単に叩きたいだけならそう言えよ
0205nobodyさん
2010/08/18(水) 13:28:51ID:???0206nobodyさん
2010/08/18(水) 13:36:58ID:???0207nobodyさん
2010/08/18(水) 13:50:49ID:???CSSっていう定数知ってる?
自分だけで開発しているんじゃないのなら、なおさら無意味な定数を作らない方がいいよ
0208nobodyさん
2010/08/18(水) 14:32:04ID:???http://book.cakephp.org/ja/view/1391/Field-naming-convention
では name="data[Modelname][0][fieldname]" といった、配列によるフォーム生成を示していますが
この、同じモデルを使っているvalideteはどうすればいいのでしょう?
配列のままモデルに投げてもvalideteに引っかかりませんし(常にtrue)、
配列をばらして個々にモデルに投げても、valideteによるエラーメッセージはフォームに反映されません。
0209nobodyさん
2010/08/18(水) 22:53:44ID:???たいした規模じゃないし、理解もすすむと思って
こういう場合Modelから先をXdebugなりで追うといいよ。
0211nobodyさん
2010/08/19(木) 09:59:59ID:???僕のコントローラーはそれはそれは太っているので、師匠にもっと痩せさせろと言われました。
「コントローラのそれぞれのファンクションはだいたい10行以内にまとめる。長くても20行ぐらい」と言われました。
次に師匠に会う時まで、できる限りコントローラーをダイエットさせたいのですが、気になる部分を質問させてくださいませ。
1. if などのビジネスロジックは一切コントローラーに書かないほうがよいか?
例えば、 if(empty(this->data)) などの単純な構造も?
2. あまりにもコントローラーをシンプルにしすぎると、コントローラのコードを見ても、なにをやっているのかが
わからないようにならないか?
特に、2の問題で頭を悩ましております。
0212nobodyさん
2010/08/19(木) 10:22:19ID:???あくまで私見でレス
1. そんなことない。書く。 if(empty($this->data))使わない理由無い
2. 処理の流れが分かるように書く。ロジックはモデルに
10行以内とかは、目安として伝えてくれたんじゃないの?
とらわれると本末転倒
0213nobodyさん
2010/08/19(木) 10:31:01ID:???ナイスな指摘ありがとうございます!
こだわりすぎて、なんでもかんでもモデルに詰め込んでしまい、
処理の流れが逆に分かりにくくなるのは本末転倒ということですね。
0214nobodyさん
2010/08/19(木) 10:36:17ID:???Mじゃあ僕の持ってるデータをこういうふうに加工して・・・はい、どうぞ
0215nobodyさん
2010/08/19(木) 11:20:34ID:???セッションにして受け渡す方法があります。
セッションを使ったほうが簡単な気がするのですが、できる限り変数で受け渡さないと
サーバに負担がかかってページが重くなるという認識は合っているでしょうか?
//こんな感じで変数で受け渡したほうが速い??
$parsed_xml = $this->Amazon->request_xml($category,$date,$page_list,$page_number);
0216nobodyさん
2010/08/19(木) 11:51:07ID:???0217nobodyさん
2010/08/19(木) 12:43:08ID:???■ このスレッドは過去ログ倉庫に格納されています