トップページ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/
0360nobodyさん2011/12/29(木) 12:54:07.59ID:???
>>356
まともな日本語でおk
「管理」の用法が特殊で意味がわからない
あと、MVCについて誤解してないか?
0361nobodyさん2011/12/29(木) 12:59:47.56ID:???
>>359
webサーバ、データベース、cakeあたりのログ
0362nobodyさん2011/12/29(木) 13:01:26.83ID:???
>>360
分からない奴は黙っていたほうが良い
恥を書いて荒らしなる道に行くから
0363nobodyさん2011/12/29(木) 13:33:28.56ID:???
わからないままは恥ずかしいので、
是非教えてください
荒らす気はありません
0364nobodyさん2011/12/29(木) 14:44:26.04ID:???
>>356
その例なら学年とクラスは一緒じゃないか?
カテゴリ・サブカテゴリの関係性だろ?
0365nobodyさん2011/12/29(木) 17:29:24.05ID:???
>>355
public_htmlの位置が変えられない環境ならこの辺参考にがんばれ
http://massat.jp/2007/01/08/110

>>356
その例だと、学年hasManyクラス、クラスhasMany生徒、のデーターベース構成の話になってしまうような
ちょっとMVCを誤解している気がする
0366nobodyさん2011/12/29(木) 17:41:41.88ID:???
なかなか斬新なMVCの解釈だなw
0367nobodyさん2011/12/29(木) 19:59:03.95ID:???
年末で暇なのか、賑わってるなー。よきかな
0368nobodyさん2011/12/29(木) 20:06:56.58ID:???
>>356
学年、クラス、生徒は全部モデルだよ。
正確に言えば、モデルが扱うデータとその属性だよ。

ま普通に考えれば、生徒がたくさん入っている生徒達データがあって、
学年とクラスは、生徒一人ひとりの属性。
0369nobodyさん2011/12/29(木) 20:09:49.58ID:???
コントローラはURLとモデルが持っているメソッドへの変換を行うものと考えればいい。
そして、メソッドの戻りをビューに変換する役目も持っている。

コントローラはあくまでURLとデータの変換をするだけで
学年とかクラスとかそんなものを扱う所ではない。
0370nobodyさん2011/12/30(金) 03:20:30.57ID:???
>>356は俺たちの煽り耐性を試してるんだと思う。
0371nobodyさん2011/12/30(金) 11:04:12.85ID:???
MVCを勘違いしていることはよく分かる。
0372nobodyさん2011/12/30(金) 12:04:16.43ID:???
MVCを理解していない人は非常に多いが、こういう勘違いをする人はレア
0373nobodyさん2011/12/30(金) 12:56:24.02ID:???
cookbookさえ読めば解決だと思う
0374nobodyさん2011/12/30(金) 13:57:03.73ID:???
MVCでラーメンは作れますか?
0375nobodyさん2011/12/30(金) 14:07:23.64ID:???
cookpadさえ読めば解決だと思う
0376nobodyさん2011/12/30(金) 14:08:22.55ID:???
MVCはなくても電気は足りるよ
0377nobodyさん2011/12/30(金) 15:17:13.68ID:???
MVC 2014年10月から引き上げ決定
0378nobodyさん2011/12/30(金) 15:37:15.23ID:???
MVCが異音出してて壊れそうなので買いに行きたいんだけど、そろそろ値段は落ち着いてるのかな
0379nobodyさん2011/12/30(金) 23:17:06.65ID:???
おれが、おれたちがMVCだ!
0380nobodyさん2011/12/31(土) 04:56:39.85ID:???
MVCとは違うのだよ、MVCとは!
0381nobodyさん2011/12/31(土) 07:32:25.22ID:???
MVCであることを強いられているんだ!
0382nobodyさん2011/12/31(土) 07:56:47.38ID:???
早くMVCになりたい!
0383nobodyさん2011/12/31(土) 07:57:13.90ID:???
MVC48がレコード大賞だってよ
0384nobodyさん2011/12/31(土) 08:39:39.24ID:???
さあ、ケーキ作りに戻ろうか。
0385nobodyさん2011/12/31(土) 19:39:46.96ID:???
結局>>362が一番アホだったなw
0386nobodyさん2012/01/02(月) 13:43:43.74ID:???
2
0387nobodyさん2012/01/02(月) 16:43:04.06ID:???
新年だし1.3系のシステムを2.0系に作り直してみるぜ
0388nobodyさん2012/01/02(月) 17:00:58.05ID:???
それは貴方にいかなる利益をもたらすのか?
0389nobodyさん2012/01/02(月) 17:34:39.76ID:???
勉強にはなる。
0390nobodyさん2012/01/02(月) 17:59:16.89ID:???
「使わない機能を切る」みたいな機能があればいいのにな。
なんでもかんでも読み込むから重くなるんだと思う。
0391nobodyさん2012/01/02(月) 18:45:39.31ID:???
>>388
他にも2.0で新規に作ったシステムがあって、それと同時に開発してるから、バージョンが違うとややこしい
あとコードが汚いからイチから書き直したいというのもある
いずれにせよ、古くなったバージョンからはさっさと離れたい
0392nobodyさん2012/01/02(月) 18:47:28.84ID:???
2.0って?p=1みたいな感じでもキャッシュは効くのかな
0393nobodyさん2012/01/02(月) 20:59:19.72ID:???
1から作りたいなら、いっそのことCake風オレオレフレームワークを作れよw
俺はそんな感じの作ってるよ。
0394nobodyさん2012/01/02(月) 21:23:42.17ID:???
cakeやるんだったらbakeって覚えとかなきゃマズい?すげぇかったるそうなんだけど。
0395nobodyさん2012/01/02(月) 22:01:40.40ID:???
楽できなくてもいいなら問題ない
0396nobodyさん2012/01/02(月) 22:15:37.39ID:???
>>395
まぁ使う方が楽なんだろうけど、やんないならやんないで別にいいって部類ならスルーしちまおうかと思って。
0397nobodyさん2012/01/02(月) 22:19:15.79ID:???
てか、bakeやらなくても1回作った物をコピーすれば良いだけじゃん。
同じような箇所が結構あるだろ
0398nobodyさん2012/01/02(月) 23:08:17.97ID:???
>>394
cakeに用意されているサンプルデータでいいから、1回はbake体験した方がいい。
ひな形とはいえ、MVC全部を作ってくれるのは助かる。
0399nobodyさん2012/01/03(火) 00:17:03.05ID:???
bakeやった方が良さそうという事がわかった。サンクス。
0400nobodyさん2012/01/03(火) 03:59:04.88ID:???
フォームヘルパーをカスタマイズしたいときって多いと思うんだけど、どうやってる?
1.helpers/form.phpをapp以下にコピーして改造
2.FormHelperを継承したMyFormHelperを作成
1→Cakeのバージョンアップ時に問題
2→ビューでの変数名がFormじゃなくなるのが嫌
0401nobodyさん2012/01/03(火) 08:57:05.67ID:???
>>400
半角スペースは投稿時に省略される。

>.2.FormHelperを継承したMyFormHelperを作成
今回はこっちを採用した。html5の input email を使いたくて、FormHelperを継承した。
0402nobodyさん2012/01/03(火) 13:58:48.66ID:???
JavaScript系のヘルパー使うのって普通にjQueryのコード埋め込むのと比べてメリットありますか?
0403nobodyさん2012/01/03(火) 15:17:25.79ID:???
PHPファイルで使える
0404nobodyさん2012/01/04(水) 00:34:45.46ID:???
結局MyFormHelperをビューで$this->Formという変数名で使うことはできないの?
0405nobodyさん2012/01/04(水) 00:43:36.30ID:???
>>404
namespaceでも使えば出来るんじゃないの?
0406nobodyさん2012/01/04(水) 09:38:54.30ID:???

>>404
https://github.com/joebeeson/analogue
0407nobodyさん2012/01/04(水) 20:46:12.62ID:???
誰かAppModelをオーバーライドして
複合主キーにも対応させてくれないか?
0408nobodyさん2012/01/04(水) 22:17:55.77ID:???
断る
0409nobodyさん2012/01/04(水) 23:27:58.25ID:???
みんなfunctionの頭にpublicってつけてる?
2.0のブログチュートリアルを見るとつけてたりつけてなかったりだけど、
何も書かなければデフォでpublicだから省略していい気がするんだけど、
書いた方が(見栄え的に)お行儀のいいコードだったりする?
http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html
0410nobodyさん2012/01/05(木) 00:24:31.76ID:???
>>409
一応CakepPHPのコーディング規則ではそこまで書いてないので、好きにすればOKかと。
ただし、メソッド名の方に規則があって、protectedの場合はメソッド名の先頭をアンダーバー、
privateの場合はメソッド名の先頭をアンダーバー2つ。

http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html#method-definition
0411nobodyさん2012/01/05(木) 01:57:28.20ID:???
変数は必ずpublic/privateつけて、メソッドはpublicなら省略するのが俺ルール。
つけたほうが一貫性があっていいとは思うんだけど、
public function 関数名
と書くと、public functionが長すぎて、ぱっと見たとき関数名に目が
行きにくいんだよな。変数は常にpublic/private意識しておくけど、
メソッドはほぼpublicで問題ないし。
0412nobodyさん2012/01/05(木) 02:06:02.96ID:???
>>410 >>411
サンクス
見た目すっきりさせたいしpublicは無しで統一するわ
0413nobodyさん2012/01/05(木) 02:32:44.05ID:???
public付けないと気持ち悪くね?
1.3時代からpublic付けてたんだが。
0414nobodyさん2012/01/05(木) 12:39:38.01ID:6HbHp9Xn
CakePHPを勉強し、自前のウェブサイトを構築したおかげで、ウェブサービスの企画があっという間できるようになった。
頭の中に、ウェブサービス構築のための常套手段が植え付けられたからだと思う。
CakePHPというよりもフレームワークを使用するメリットと言った方が適切かな。
0415nobodyさん2012/01/05(木) 17:48:11.25ID:???
2.0になって、404吐かせるのがcakeErrorからthrow new NotFoundException()に変わったせいか、
AppControllerのbeforeFilterでsetした値が404の時にビューに反映されないようになった?
全ページでヘッダー部分に表示させてる共通データの部分が、404の時だけundefined variableになってしまう
SQLログ見るとデータ自体は取ってきてるみたいだけどsetしたはずのデータがビューに反映されない
0416nobodyさん2012/01/05(木) 17:52:46.12ID:???
>>413
コア見るとpublicつけてるみたいね
コアと共通表記にしたいのならpublicつけるべきだと思う
0417nobodyさん2012/01/05(木) 21:37:19.55ID:???
>>415
ビューがClassRegistyに登録されなくなったから、ビューの別インスンタンスが生成されて
それが使われる。
あとデフォルトのExceptionRenderer(というか、CakeErrorController)はbeforeFilter()まで実行しない。
beforeFilterで例外飛ばすときもあるじゃん?
というわけでExceptionRendererを継承したクラスを作ってそれを使うのがお勧め。
_getController()でもオーバーライドすればいいじゃないの。
0418nobodyさん2012/01/05(木) 22:25:09.07ID:???
>>417
ありがとう
なんか取り回しが悪くなった気がして仕方ないがw
0419nobodyさん2012/01/06(金) 01:07:10.01ID:yz+Wi1W6
Model::find('all')のfieldsにサブクエリを使いたいんだけど
どうすればいいですか?
0420nobodyさん2012/01/06(金) 06:11:17.85ID:???
セッションファイルってどれだけ溜めてもいいもん?
云万になるとlsが遅くなる気がするけど、
PHPがセッションファイルを直接取ってくるんならとくに大丈夫なのかな
0421nobodyさん2012/01/06(金) 07:36:47.81ID:???
>>420
全列挙する必要がある ls には O(N) 必要
それに対して目的のファイルが判っている場合は O(log N) に収まる
古いファイルシステムだとまた話が変わってくるが
0422nobodyさん2012/01/06(金) 07:42:05.08ID:???
>>421
100万あっても無視できる程度になりそうですね
0423nobodyさん2012/01/06(金) 09:12:24.69ID:???
ファイルってインデックス化されるん?
そらされるか…
0424nobodyさん2012/01/06(金) 10:03:42.70ID:???
インデントはスペース派なんだけど、
Cakeはタブだよね?

スペース派の人どうしてる?
Cakeに合わせてる?
0425nobodyさん2012/01/06(金) 11:54:55.28ID:???
プロジェクトや会社によってはPEAR規約(っぽいもの)で開発してたりするよ
0426nobodyさん2012/01/06(金) 14:42:53.01ID:???
cakephp2.0を置いてHelloコントローラとindexアクションとhelloビューを作って
http://localhost/helloにアクセスするとhelloビューの内容が読み込まれましたが
http://localhost/にアクセスするとcakephpのreadme見たいな感じのページがでてしまいます
http://localhost/にアクセスした場合のデフォルトのコントローラをhelloにしたいのですがこれはどこのファイルに設定するのでしょうか?
0427nobodyさん2012/01/06(金) 15:56:30.42ID:???
routes.php
0428nobodyさん2012/01/06(金) 23:03:59.16ID:???
>>424
自分で書いたコードはスペースインデント
routes.phpとか既に用意されているファイルはタブインデント
一人プロジェクトだから細かいことは(゚ε゚)キニシナイ!!
0429nobodyさん2012/01/07(土) 08:27:20.92ID:???
携帯からアクセスがあったときは、
app_controller の before_filter で

header('Content-Type: application/xhtml+xml; charset=Shift_JIS');
という風にHTTPヘッダの content-type と charset を設定して、本来

Content-Type: application/xhtml+xml; charset=Shift_JIS
このヘッダが送られるはずが、

Configure::write('debug', N);
この設定を、0(デバッグ無し)に変更すると、

Content-Type: text/html
と、出力されてしまう。
(3 にするとちゃんとxml用のヘッダが送られるのは確認済み)

このケースが逆なら、手動でヘッダを送る前にデバッグ情報が送られているのかなと思うのですが、
デバッグ無しにすると、別のヘッダが送られているのが不思議です・・・。

どのファイルのどこでHTTPヘッダが送られているかって確認できましたっけ?
04304292012/01/07(土) 08:33:08.99ID:???
大事なことを言い忘れていました。
>>429の現象はさくらの本番サーバにアップしたときにのみ起こります。
開発環境のlocalhostではdebugの値に関係なく、
意図したHTTPヘッダが送られています。

アドバイスいただければ幸いです
0431nobodyさん2012/01/07(土) 12:27:32.35ID:???
一部のアクションでしか使わないコンポーネントを全部ロードするのは無駄ですが
アクションに応じて、ロードするコンポーネントを変更することはできないのでしょうか?
0432nobodyさん2012/01/07(土) 13:24:04.51ID:???
>>431
App::importは?

http://book.cakephp.org/1.3/ja/view/876/%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB#!/1.3/ja/view/936/%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9-%E3%83%A2%E3%83%87%E3%83%AB-%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88
0433nobodyさん2012/01/07(土) 13:52:12.56ID:???
>>432
リンク先は違う情報だったけど要は
App::import('Component', 'Mailer');
$Mailer = new MailerComponent();
$Mailer->initialize( $this );
$Mailer->startup( $this );
ってやればいいのかな?
0434ひろみちゃん2012/01/07(土) 17:28:25.09ID:???
>>431
2.0からコアの機能で動的に読めますが、1,x系は拙作のHackプラグインを使うことによって
期待する機能が提供されます。
https://github.com/hiromi2424/hack_plugin
Alias->loadComponent('Mailer');
startupするかは第3引数にtrueを指定すればOKです。
ドキュメントが整備されてないのですが需要があればします。
あとプラグイン名が厨二病臭いですが厨二病なので諦めてください。
0435nobodyさん2012/01/07(土) 17:52:24.37ID:???
>>434
ありがとうございます
拝見しましたが、思ったより長いですね
>>433のやり方じゃ駄目で、このようにきっちりやるべきなんでしょうか
0436ひろみちゃん2012/01/07(土) 18:00:20.89ID:???
>>435
短期的には>>433のやり方でも問題ないです。
メールのマネージャー程度のコンポーネントならまず大きな問題は起こりえないでしょう。
長期的に見れば、2.0で導入されるやり方に近いほうがより良いと思います。
0437nobodyさん2012/01/07(土) 18:15:00.53ID:???
わかりました、ありがとうございます
コードはありがたくいただきます
0438nobodyさん2012/01/07(土) 21:17:09.01ID:???
2.0でこのAdminAuthComponentがちゃんと動いている人いる?
http://www.1x1.jp/blog/2008/01/cakephp_adminauthcomponent.html

開発環境では問題なかったんだけれども、レンタルサーバーに上げてみたら
> header("WWW-Authenticate: Basic realm=\"Please Enter Your Password\"");
のところが効いてないのか、Basic認証のダイヤログが出ずにAuthorization Requiredと表示されてしまう。

HTTPヘッダーを見てみたところ、開発環境(正しく動いている環境)では
>HTTP/1.1 401 Authorization Required
となっているのが、本番(正しく動かない環境)では
>HTTP/1.1 200 OK
が出てしまっている。

ちょっと>>429の状況に近いかも知れないけど、自分の方はdebugの値に関係なくheaderがちゃんと送信されてない感じ
04394382012/01/07(土) 21:49:27.70ID:???
すまん、自己解決
CGI版のPHPだとBasic認証効かないのね
0440nobodyさん2012/01/07(土) 22:13:13.36ID:???
2になってからちょっと軽くなった?
1.xと比べてシャキシャキ動いてる気がする
0441nobodyさん2012/01/07(土) 22:51:46.73ID:???
2.0.5ぐらいになってるけど、バグは減った?
0442nobodyさん2012/01/07(土) 23:02:34.52ID:???
なに、動きが軽くなるなら乗り換えたいが
0443nobodyさん2012/01/08(日) 01:17:09.40ID:???
何となく軽いと言うだけでベンチを取ったわけじゃないので話半分に聞いてくれ
0444nobodyさん2012/01/08(日) 03:29:35.66ID:???
そうか、ベンチ取った人とかいないのかな
0445nobodyさん2012/01/08(日) 14:39:21.96ID:???
http://doophp.com/files/benchmark.png
dev版だけど、多少軽くなってるみたいだな
0446nobodyさん2012/01/09(月) 00:29:39.74ID:pfm1AGOc
controllerでfindするときのorderを
'order' => array('Person.secondname ASC')
のようにしているんですが、複数のorder条件をつけるのはどうしたらいいですか?

具体的には苗字順に並べるようにしてるんですが、苗字がない人は下の名前(Person.firstname)を参照して五十音で並べたいです
0447nobodyさん2012/01/09(月) 00:37:51.69ID:???
自己解決しました
$options['order'] = array(
'Person.secondname, Person.firstname ASC'
);
で$optionsをうしろにくっつければいけました
0448nobodyさん2012/01/09(月) 00:53:14.64ID:???
>>446です>>447では解決してませんでした。。
0449nobodyさん2012/01/09(月) 01:58:03.73ID:???
orderがarrayになってるんだから分かるだろ?
0450nobodyさん2012/01/09(月) 06:19:15.24ID:???
コントローラーで
function index($param){
とアクションを作っていて、URLで
コントローラー名/index/パラメータ
と呼ばすに
コントローラー名/パラメータ
とやっても動くようにするにはどうすればよいでしょうか
ぐぐるとRoutesを使う例が出てきましたが、それだと他のアクションが使えなくなるようでした
アクションとして存在しない時のみ、indexのパラメータとして扱うことはできないでしょうか
0451nobodyさん2012/01/09(月) 08:57:47.96ID:???
>>450
$paramが数値なら、ルーティング規則でその部分に(数値であることの)正規表現を書けば
いける。詳しくはぐぐって。
だめだったらカスタムルートオブジェクトを作成してひーこらするしかない。頑張って。
0452nobodyさん2012/01/09(月) 08:58:56.35ID:???
その部分にってのは紛らわしいなごめん
Router::connect()の第3引数で指定するってこと。
0453nobodyさん2012/01/09(月) 09:04:31.25ID:???
調べ中ですがまだうまくいっていません
ちなみに$paramは文字列で、複数ある場合もありますが大丈夫でしょうか
0454nobodyさん2012/01/09(月) 09:46:49.44ID:???
数値ならってわざわざ書いたのはなんでだと思う?
0455nobodyさん2012/01/09(月) 23:29:06.48ID:???
cakephpのサイトだけ紹介してるサイトないかな
0456nobodyさん2012/01/09(月) 23:34:27.49ID:SU3KFcHv
2になって、AuthComponentがかなり洗練されたね
0457nobodyさん2012/01/09(月) 23:37:13.69ID:???
CakePHPでページを表示すると下の方にsqlを200件だしているような表示になります
これは実際に200件実行してるということでしょうか
すると問題ありますかね
0458nobodyさん2012/01/09(月) 23:43:44.32ID:???
件数取得してるだけじゃないのか?
sqlを200回実行してるわけねーだろ
0459nobodyさん2012/01/09(月) 23:49:11.21ID:???
>>458
ありがとうございます。
(default) 262 queries took 46 ms こう表示されてました。
■ このスレッドは過去ログ倉庫に格納されています