トップページ⇒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/
0052nobodyさん2008/12/21(日) 15:44:20ID:???
>>51
Cakeへの文句の半分くらいをRoRが引き受けてくれる
0053nobodyさん2008/12/21(日) 17:04:19ID:???
RoRで作ってもレンタル鯖で動かんしなぁ
だったらJavaでいいじゃんみたいな
0054nobodyさん2008/12/21(日) 17:10:46ID:???
>>53
工数どんだけ違うんだよw
0055nobodyさん2008/12/21(日) 17:27:24ID:???
SAStrutsだったら工数変わらんのじゃない?
開発中はデプロイしなくていいからスクリプト言語と変わらんし
scaffoldみたいなのもあるよ
殆どCakePHPと同じ
0056nobodyさん2008/12/22(月) 17:14:23ID:???
Auth使うと認証必要ページにいったときに自動的にログインページに飛ぶけど
最初のページに対してPOSTデータを送っていた場合、失われるんだよね

ログインページへのリダイレクトはAuthコンポーネントが勝手にやってるから
セッションに入れたりって事も出来ない

どうすればいいと思う?
0057562008/12/22(月) 17:27:43ID:???
ログイン後に元のページへAuth->redirect()で戻るけどPOSTデータがなくなってるから意味無い場合がある
って事ね
0058nobodyさん2008/12/22(月) 18:20:32ID:???
運用はさて置いて、
「認証が出来てない状態でPOSTが出来てることがそもそもおかしい」
というのが直感。

この場合は
「POST元のページに認証をかけて、そもそもの条件が発生しないようにする」
が解。
(当然、認証外のPOSTは受け捨て)

……これじゃダメなんだろうってことは察するけどw
0059nobodyさん2008/12/22(月) 18:24:37ID:???
何かPOSTした時点で認証って別におかしくないでしょ
セッション短いとかあるタイミングで改めてログイン再確認とか
0060562008/12/22(月) 18:35:31ID:???
>>58
とりあえずその方向で一応の解決はした。
未認証の場合、フォームじゃなく「○○をする」みたいなリンクを出して
クリックするとログインフォーム、ログインすると元のページに来てフォームが表示されてる、
と言う形にした。

ただこの場合気になるのは、ビューでいちいちログイン状態を見て
リンクとフォームを切り替える必要がある事。
AuthコンポーネントがPOSTデータの再現もしてくれるのなら、
単にフォームを表示するだけで済む。

POSTする前に認証させておけ、と言うのとどちらが本来正しいのかは判断しかねるけど。
0061nobodyさん2008/12/22(月) 20:05:14ID:???
モデルにアソシエーション書く時って
自モデルのフィールド名は指定出来るけど相手モデルのフィールド名は指定出来ないよね。
デフォルトでidフィールドが参照される

これって変更できる?
0062nobodyさん2008/12/22(月) 20:09:45ID:???
auth compornent使ってみたけど、
これってログイン画面1つしか管理できないんですかね?

2種類のログイン画面を設置したいとき、なにかやり方ありますか?
投稿用と、観覧用など…
0063nobodyさん2008/12/22(月) 20:20:39ID:???
userテーブルにprofile_idがあり、profileテーブルがあるとする
postテーブルにuser_idがあるとする
profile-user-post と言う関係

profileのフィールドでpostテーブルを絞り込み、paginatorで表示したい。
と言う場合直接SQL書く以外にどういう手段がある?

端的に言えばpaginatorでの二つ先のテーブルのバインドってこと。
コンテイナブルで出来るのかと思いきや、直接アソシエーションが張られてないとダメらしい。
つまりuserとprofileが繋がってても、postからprofileが直接繋がってないとエラーになる。

モデルにpaginate用のメソッドを書けるけど
それ使っても直接SQL書く事は避けられそうにない。
割と良くあるアソシエーションパターンだと思うんだけど。
0064nobodyさん2008/12/22(月) 20:21:13ID:???
>>62
loginアクションで2つのビューを切り替えればいいんじゃない?
0065632008/12/22(月) 21:56:02ID:???
joins使って一応解決
にしてもスマートだとは思えない
0066nobodyさん2008/12/22(月) 22:57:09ID:???
>>61
???
foreignKeyではだめなの?

> 自モデルのフィールド名は指定出来るけど相手モデルのフィールド名は指定出来ないよね。
> デフォルトでidフィールドが参照される
これの意味するところがよくわからない。
0067622008/12/22(月) 23:08:40ID:???
>>64
あ、画面だけっていうか、ユーザのアクセス管理も2パターンにわけたいって意味でした。
ちょっと書き方足りなくてすみません。
0068622008/12/22(月) 23:20:27ID:???
うーん。cakeの中にもうひとつcakeを置いて、そこで2つ目のユーザ管理するしかないかな。
トホホな気もするけど…
0069nobodyさん2008/12/22(月) 23:41:22ID:???
>>67
<a href="http://book.cakephp.org/ja/view/248/AuthComponent-%E3%81%AE%E5%A4%89%E6%95%B0">AuthComponent の変数 :: 認証 :: 組み込みのコンポーネント :: マニュアル :: 1.2 Collection :: The Cookbook</a>
ここを読むと、userModelで別テーブルを指定してやればいいように思える。
0070622008/12/22(月) 23:56:41ID:???
>>69
書き方まぎらわしくてすみません。
投稿用のユーザ管理と、観覧用のユーザ管理があって、それぞれ
別のページにアクセスできることを想定してました。

複数のモデルをauthで管理できればいいのですが、情報ないですね。
特殊なケースではないと思うのですが、みなさん各自でカスタマイズして
るんでしょうか?
0071692008/12/23(火) 00:11:20ID:???
> 複数のモデルをauthで管理できればいいのですが、情報ないですね。
うん、そういう意味で上のリンクを張ったんだけど。

モデルを切り替えるんではなくて、複数のモデルを一緒くたにして扱いたいってことですか?
0072622008/12/23(火) 00:26:01ID:???
>>71
はい。複数のモデルを一緒くたにして扱いたいのです。
それぞれのモデルに登録されたユーザ毎にでアクセス制限かけたくて。

思いついた方法は、cakeの中にもうひとつcakeを入れることくらいでした。
0073nobodyさん2008/12/23(火) 01:20:40ID:???
そういう権限レベルを分けるためのコンポーネントがある
0074nobodyさん2008/12/23(火) 01:21:10ID:???
つーかもう一つcake入れるとかふざけたことやらずに
せめて自分でコンポーネント実装しろよw
0075622008/12/23(火) 01:57:15ID:???
や、やっぱふざけてますかこれw
肝はコンポーネントなんですね。実装といわれると
とても難しそうですが、調べてみます。

みなさん、ヒントをありがとうございます。
0076nobodyさん2008/12/23(火) 02:23:37ID:???
ACLでいいんじゃないの?
最初理解するのは難儀かもしれんけど。
0077nobodyさん2008/12/23(火) 03:31:28ID:???
>>73の言うように権限レベルを分けるコンポーネントはすでにあるよ
1.2で動くかどうかは知らんけど
0078732008/12/23(火) 06:42:00ID:???
つーかACLの事ね

ところで質問なんだけどモデル名とテーブル名の変換関数とかって
0079nobodyさん2008/12/23(火) 08:28:34ID:???
>>56
http://book.cakephp.org/ja/view/395/autoRedirect
やりたいことができるよ
0080nobodyさん2008/12/23(火) 08:30:26ID:???
>>78
http://book.cakephp.org/ja/view/491/Inflector
これ?  とエスパー
0081692008/12/23(火) 08:50:50ID:???
>>72
認証と権限管理がごっちゃになってない?

Authコンポーネントは認証をするためのものだから、
そういう使い方をしようとすると無理が出るんだとおもう。

他の人も言っているように権限管理はACLコンポーネントを使うのがいいよ。
0082nobodyさん2008/12/23(火) 15:24:32ID:???
routeがすげえ強力だというのを把握した
0083nobodyさん2008/12/23(火) 16:03:34ID:???
CakePHPって、どこもかしこもarrayだらけだ。
arrayの入れ子ばかりたくさん書いていると、なんだかLISPを書いているような
気になる。
つうか、LISPの偉大さを思い知った気がする。
リストの入れ子の表現力はすげえな。
0084nobodyさん2008/12/23(火) 16:08:36ID:BZm1ywfg
管理用機能と一般ユーザ用機能が完全に分けられるなら
システムごと分けちゃった方がベターだと思うんだ
0085nobodyさん2008/12/23(火) 17:32:11ID:???
phpは配列の方が扱いやすい

echo"僕の名前 $a['name']";

こういう書き方が出来るけど

オブジェクトだと

echo"僕の名前 $a->name";

こうするとエラーが出るから

echo '僕の名前'.$a->name;
とか解体作業が必要になる
0086nobodyさん2008/12/23(火) 17:34:50ID:???
phpは配列を扱う関数が豊富だから
オブジェクトを扱う場合も結局は配列の変換しないと
phpには豊富にある配列関数を利用できないんじゃない
0087nobodyさん2008/12/23(火) 17:49:25ID:???
>>85

ネタですか?w
0088nobodyさん2008/12/23(火) 17:50:33ID:???
レベル低過ぎ

>>85
後者でもエラーでないよ? つうか、前者であれ後者であれ、
どこまで変数かを示すように、ブレースで囲む習慣をつけたほうがいいよ。

>>86
オブジェクトを配列として扱いたいんならArrayObjectとかあるやん。
foreachでプロパティ以外を扱いたいならIterator系をimplementすればいいし。
0089nobodyさん2008/12/23(火) 23:11:18ID:???
PHPユーザの中でもレベルの低い層がCakePHPへ流れてきている悪寒
0090nobodyさん2008/12/24(水) 03:20:53ID:???
PHP界隈って、どうしても「レベル低い」言いたい人がいるよねw
0091nobodyさん2008/12/24(水) 04:16:31ID:???
アソシエーションの解決をスマートに解決する方法ないかなー
2つ3つ先のテーブルとなるとjoins使うしかないよね?

アソシエーションで読み込んだモデルのrecursive設定を見てそこからさらに見てくれればいいのに
アソシエーション探索を行うモデルを指定出来るようにして
0092nobodyさん2008/12/24(水) 05:46:45ID:???
>>88
ArrayObjectはPHP5.2からだよ。
phpはオブジェクトは扱いにくいって言ってるだろうが素人が
なんでわかんねーかな
0093nobodyさん2008/12/24(水) 05:53:40ID:???
>>88
phpはオブジェクトの方が扱いやすいと思ってんの?
0094nobodyさん2008/12/24(水) 05:59:57ID:???
PHP4のサポート終わってみんな5.2になりつつあるんだから5.2からでもいいんじゃね?
0095nobodyさん2008/12/24(水) 06:04:17ID:???
>>88
オブジェクトだと
ArrayObject関数とか必要になるんでしょ?
それって手間じゃない?


0096nobodyさん2008/12/24(水) 06:09:24ID:???
>>88
>>foreachでプロパティ以外を扱いたいならIterator系をimplement
どうやって?コード書いてくれよ
javaじゃないんだからさ。。。
0097nobodyさん2008/12/24(水) 06:11:27ID:???
>>94
なりつつあるもののを
当たり前に使えるのような言い方をするのは
いかがなものかと・・・
0098nobodyさん2008/12/24(水) 06:19:47ID:???
>>88
ArrayObjectみたいな不安定な関数よく使ってるよなwww
http://uruseiyatsura.way-nifty.com/blog/2007/04/php5arrayobject_51d1.html
0099nobodyさん2008/12/24(水) 06:22:53ID:???
>>88
>>オブジェクトを配列として扱いたいんならArrayObjectとかあるやん。

ArrayObjectてオブジェクトを配列として扱う関数なん?
配列をオブジェクトとして扱うんじゃなくて?
http://php.mirror.camelnetwork.com/manual/ja/class.arrayobject.php
0100nobodyさん2008/12/24(水) 06:27:46ID:???
>>88
ArrayObjectて配列をオブジェクトとして扱ってるよね?
記事をきちんと読もうよ!素人さん
0101nobodyさん2008/12/24(水) 11:25:53ID:???
いまさら知ったんだけど、OpenPNEがフレームワークにsymfonyを採用したみたいね。
ちょい嫉妬w
0102nobodyさん2008/12/24(水) 13:12:13ID:???
>>97
特定の環境で動かすアプリが殆どなんだから
一般配布するCGIでもなけりゃ使えるなら使えばいいともう
0103nobodyさん2008/12/24(水) 14:29:58ID:???
>>102
つかえばいいやん
CakePHPで使う必要がどれだけあるのかと・・・
0104nobodyさん2008/12/24(水) 14:34:03ID:???
使える、使いたい、って言ってる人に対して、
使う必要ないってかたくなに言うのもなんだかなぁって思う。
0105nobodyさん2008/12/24(水) 17:44:15ID:???
あくまでアドバイスや意見で自分で判断すればいいじゃん
0106nobodyさん2008/12/24(水) 20:54:05ID:???
>>105
おまえのはアドバイスじゃねーよw
自分の発言繰り返して読んでみろ
0107nobodyさん2008/12/24(水) 23:37:14ID:???
>>106
あらあら、次は勝手に特定ですかw
0108nobodyさん2008/12/25(木) 12:13:56ID:???
2カラムのインデックスをmodelにプライマリキーとして設定することが可能であれば、
設定を教えて頂けませんでしょうか?

既存のmysql DB管理にcakeを使うつもりでいたら、上記設定のため
idのテーブルを追加してプライマリに設定することが行えませんでした。
0109nobodyさん2008/12/25(木) 12:26:16ID:???
cake使うなら、OOPの勉強は必須?

なんかやたら「なんちゃらextends〜〜」とかって
出てくるんですけど??
0110nobodyさん2008/12/25(木) 12:31:02ID:???
>>109
不要。
extendsが何をしているかとか、疑問に思ったら都度調べるくらいの姿勢があれば良いと思う
0111nobodyさん2008/12/25(木) 13:14:10ID:???
>>108
http://book.cakephp.org/ja/view/24/
「できなかった」というと?
0112nobodyさん2008/12/25(木) 13:30:27ID:???
>>111
既存のプログラムが使用しているDBを、横からcakeで管理したかったので、
DBを新しく作ったり、すでに作られている2カラムのインデックスを解除したりは
できません。

idカラムを作成し、auto incrementalを設定しようとすると、
すでにprimaryが存在するために処理が失敗してしまいました。

primaryに設定されている2カラムのインデックスを解除すると、
既存のプログラムが動作しなくなってしまうのです…
0113nobodyさん2008/12/25(木) 13:47:22ID:???
>>112
CakePHPでは複合プライマリキーは使えない
0114nobodyさん2008/12/25(木) 13:57:27ID:???
>>112さん
ここを読むといいよ!

"複合キー" フォーラム - CakePHP Users in Japan
ttp://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=1304&forum=6&move=prev&topic_time=1216343829
0115nobodyさん2008/12/25(木) 23:43:53ID:???
>>113-114
cakeと複合キー処理について、理解が深まりました。
なんとかなりそうです。ありがとうございます。
0116nobodyさん2008/12/26(金) 10:52:31ID:???
1.2 stableあげ
0117nobodyさん2008/12/26(金) 11:25:09ID:???
RC4からほとんど変わってないやんけw
もっと完全にバグ取ってからにしてほしかった・・・

でもおめでと〜!
0118nobodyさん2008/12/26(金) 12:06:29ID:???
1.2すたぶるキター

く・・クリスマスプレゼント?
0119nobodyさん2008/12/26(金) 12:24:27ID:???
しかもケーキってとこが洒落てるw
0120nobodyさん2008/12/26(金) 12:32:56ID:???
いや、クリスマスケーキか
0121nobodyさん2008/12/26(金) 12:33:32ID:???
あ、リロード忘れてレス付いてるのきづかんかったわ
0122nobodyさん2008/12/26(金) 15:09:01ID:???
いつもDonationの所 No Thanksでごめんね。
0123nobodyさん2008/12/26(金) 15:14:48ID:???
三項条件式どんだけ便利やねん。多様は可読性悪くする
ビューで使うとかなり見通しがよくなる
0124nobodyさん2008/12/26(金) 15:26:28ID:???
CakePHP におけるシンボルの命名規約

private 先頭にアンダーバーを2つ置く __test
protected 先頭にアンダーバーを1つ置く _test
public 先頭にアンダーバーを置かない test

ナンジャコリャー
0125nobodyさん2008/12/26(金) 15:44:12ID:???
>>124
Pythonでも似た仕組みが使われている。
慣れれば悪いものじゃない。
0126nobodyさん2008/12/26(金) 16:23:26ID:???
cakephp,ちょっとむずかしくない?
0127nobodyさん2008/12/26(金) 16:33:19ID:???
EthnaやMapleよりかなり簡単だと思ったが
0128nobodyさん2008/12/26(金) 17:06:20ID:???
>>126
難しいというか独自ルールが多いとは感じた。
しかし、それを超えた先の開発効率はすばらしいと思う。
0129nobodyさん2008/12/26(金) 17:06:36ID:???
ん?
cakeのprotectedってどういうタイミングで使うん??
0130nobodyさん2008/12/26(金) 17:13:03ID:???
ほんとに開発効率高いのかなあ
symfonyも使ったけどバリデーションルールの自動生成が無いのは確実にマイナス
0131nobodyさん2008/12/26(金) 18:17:48ID:???
1.1から1.2に変えたら表示に常に10秒余計にかかるようになったけどなんで?
0132nobodyさん2008/12/26(金) 19:14:18ID:???
debugモードじゃね
0133nobodyさん2008/12/26(金) 19:19:08ID:???
開発効率の向上以上に、メンテナンス効率の向上を実感することが多い
過去製作したコードを見たとき、「何でこんなことしてるんだっけ?」っていうのが激減した
0134nobodyさん2008/12/26(金) 19:50:29ID:???
1.2stableのbakeって複数プロジェクト前提みたいになったけど、どこにプロジェクト作るのがいいんだろ?
cakeの一番上のディレクトリに、/appと並ぶ形で作ると管理しやすいかな。
PDTとかで管理する上でも。
01351342008/12/26(金) 22:09:57ID:???
結局楽するために今までどおりappの中に作る事にした
0136nobodyさん2008/12/26(金) 22:30:57ID:???
複数プロジェクトってどうやるんですかね?
0137nobodyさん2008/12/26(金) 22:36:04ID:???
複数プロジェクトとうか、コア(cakeディレクトリ)の共有だろ?
マニュアルに書いてある。
http://book.cakephp.org/ja/view/35/
0138nobodyさん2008/12/26(金) 22:41:30ID:???
コミュニティのレベルも低いし
だめっぽくねcake
0139nobodyさん2008/12/26(金) 22:55:42ID:???
とくにダメっぽいところ感じないんだが
0140nobodyさん2008/12/27(土) 01:25:44ID:???
>>136
bakeで好きなところにプロジェクトを吐けるよ
0141nobodyさん2008/12/27(土) 03:36:46ID:???
http://book.cakephp.org/ja/view/35/
とかIE7でもおかしいし、firefoxだともっとやばい
なんとならんの?
0142nobodyさん2008/12/27(土) 08:43:14ID:???
CakePHPの新しい本(英語だけど)
Practical CakePHP Projects 400ページ 3,963円 08/12/8発行
http://www.amazon.co.jp/Practical-CakePHP-Projects/dp/143021578X/ref=tag_dpp_lp_edpp_img_in
どうよ?

(参考)半年前に発売されている姉妹書
Beginning CakePHP: From Novice to Professional 344ページ 3,963円 08/7/21発行
http://www.amazon.co.jp/Beginning-CakePHP-Novice-Professional/dp/1430209771/ref=tag_dpp_lp_edpp_img_in
0143nobodyさん2008/12/27(土) 12:39:56ID:???
>>142
4000円とかあほくさー

ページあたり10円かよ
0144nobodyさん2008/12/27(土) 13:29:46ID:???
「Terrible Examples, Poorly Written Book...」って言われてる。
0145nobodyさん2008/12/27(土) 13:52:50ID:???
このシリーズって日本で言うと「できる」シリーズみたいなもんだろ?
0146nobodyさん2008/12/27(土) 15:59:16ID:???
できるシリーズは明らかに超初心者向けな写真メインの構成なだけで
値段も倍くらい違うし一緒にするのはかわいそう
0147nobodyさん2008/12/27(土) 18:29:26ID:???
早速CakePHP 1.2.0.7962-Stableをダウンロードし、CakePHP1.2を始めようとしたら
http://cakeforge.org/frs/?group_id=23&release_id=433
app/config/の中に、database.php.defaultファイルが見当たらない。
探し方が悪いのか?本家が忘れ物したのかな?
みなさんのところdatabase.php.defaultファイルあります?
0148nobodyさん2008/12/27(土) 18:33:33ID:???
>>147です。
database.php.defaultありました。スマソ
0149nobodyさん2008/12/28(日) 18:51:53ID:???
聞きたいことがある。

Model::save() で、バリデーションエラーではなく、DBシステムエラーが起こっ
た場合には、同様に戻り値は false になるんだろうか?

もしそうなら、バリデーションの場合とシステムエラーの場合とで、戻り値が
falseの時の処理を分けなければいけないと思うんだけど、どうしたらいいんだろ?

1. save()の前にvalidate()を実行して分岐する。
2. save()のあとにinvalidFields()を実行して分岐する。
みんなはどうしてる?
0150nobodyさん2008/12/28(日) 20:13:58ID:???
>>149
Model::onError()
0151nobodyさん2008/12/28(日) 20:41:33ID:???
>>150
うわー、これ知らなかった!
なんだ、DBアクセスの箇所ごとにエラー処理する必要はなかったんだ。
ありがとう。
■ このスレッドは過去ログ倉庫に格納されています