【PHP】フレームワーク CakePHP 13ホール目【v2.0】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/09(水) 01:05:10.60ID:???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/
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:???0426nobodyさん
2012/01/06(金) 14:42:53.01ID:???http://localhost/helloにアクセスするとhelloビューの内容が読み込まれましたが
http://localhost/にアクセスするとcakephpのreadme見たいな感じのページがでてしまいます
http://localhost/にアクセスした場合のデフォルトのコントローラをhelloにしたいのですがこれはどこのファイルに設定するのでしょうか?
0427nobodyさん
2012/01/06(金) 15:56:30.42ID:???0428nobodyさん
2012/01/06(金) 23:03:59.16ID:???自分で書いたコードはスペースインデント
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ヘッダが送られているかって確認できましたっけ?
0430429
2012/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:???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:???リンク先は違う情報だったけど要は
App::import('Component', 'Mailer');
$Mailer = new MailerComponent();
$Mailer->initialize( $this );
$Mailer->startup( $this );
ってやればいいのかな?
0434ひろみちゃん
2012/01/07(土) 17:28:25.09ID:???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:???ありがとうございます
拝見しましたが、思ったより長いですね
>>433のやり方じゃ駄目で、このようにきっちりやるべきなんでしょうか
0436ひろみちゃん
2012/01/07(土) 18:00:20.89ID:???短期的には>>433のやり方でも問題ないです。
メールのマネージャー程度のコンポーネントならまず大きな問題は起こりえないでしょう。
長期的に見れば、2.0で導入されるやり方に近いほうがより良いと思います。
0437nobodyさん
2012/01/07(土) 18:15:00.53ID:???コードはありがたくいただきます
0438nobodyさん
2012/01/07(土) 21:17:09.01ID:???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がちゃんと送信されてない感じ
0439438
2012/01/07(土) 21:49:27.70ID:???CGI版のPHPだとBasic認証効かないのね
0440nobodyさん
2012/01/07(土) 22:13:13.36ID:???1.xと比べてシャキシャキ動いてる気がする
0441nobodyさん
2012/01/07(土) 22:51:46.73ID:???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:???dev版だけど、多少軽くなってるみたいだな
0446nobodyさん
2012/01/09(月) 00:29:39.74ID:pfm1AGOc'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をうしろにくっつければいけました
0449nobodyさん
2012/01/09(月) 01:58:03.73ID:???0450nobodyさん
2012/01/09(月) 06:19:15.24ID:???function index($param){
とアクションを作っていて、URLで
コントローラー名/index/パラメータ
と呼ばすに
コントローラー名/パラメータ
とやっても動くようにするにはどうすればよいでしょうか
ぐぐるとRoutesを使う例が出てきましたが、それだと他のアクションが使えなくなるようでした
アクションとして存在しない時のみ、indexのパラメータとして扱うことはできないでしょうか
0451nobodyさん
2012/01/09(月) 08:57:47.96ID:???$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:???0456nobodyさん
2012/01/09(月) 23:34:27.49ID:SU3KFcHv0457nobodyさん
2012/01/09(月) 23:37:13.69ID:???これは実際に200件実行してるということでしょうか
すると問題ありますかね
0458nobodyさん
2012/01/09(月) 23:43:44.32ID:???sqlを200回実行してるわけねーだろ
0459nobodyさん
2012/01/09(月) 23:49:11.21ID:???ありがとうございます。
(default) 262 queries took 46 ms こう表示されてました。
0460nobodyさん
2012/01/09(月) 23:55:34.73ID:???262回クエリ投げてるな
どんなページだか知らないがさすがに多すぎると思う
っていうか、自分で実装したコードなんだろうからクエリ回数くらい検討つくだろう
アソシエーションで勝手にいっぱい持ってきているのならcontainableで引っ張ってくるデータを厳選すればいいぞ
0462nobodyさん
2012/01/10(火) 01:48:35.15ID:???0463nobodyさん
2012/01/10(火) 03:05:48.92ID:Rzgwr3Tg0464nobodyさん
2012/01/10(火) 05:46:55.61ID:???遅い原因の一つはこれか?
0465nobodyさん
2012/01/10(火) 10:19:59.29ID:???Yiiにしとけ
CakePHPはオワコン
0466nobodyさん
2012/01/10(火) 12:07:44.08ID:+4VQFJJnaテーブル
bテーブル
a_bテーブル
があるとして
a にhasAndBelongsToManyを設定して
a_b にbelongsToを設定したら、このbelongsToがスルーされる。なぜだかわかる?
削除用に設定したいんだけど、毎回bindModelするしかないのかな。
0467nobodyさん
2012/01/10(火) 12:11:35.74ID:???0468nobodyさん
2012/01/10(火) 13:05:20.54ID:???0469nobodyさん
2012/01/10(火) 13:14:52.36ID:???0471nobodyさん
2012/01/10(火) 19:50:56.57ID:???表向きは404返してくれるんだけど、error.logにmissing controllerが記録されるようになった気がする
テスト環境時はmissing controllerエラーを表示してくれてOKだけど、本番でそれがerror.logに記録されるのはなんか変じゃないか?
/robots.txtとか/favicon.icoとかにアクセスがあったら、ひたすらerror.logに記録されちゃってるし(ファイルがない場合)
0472nobodyさん
2012/01/10(火) 21:31:38.90ID:???0475nobodyさん
2012/01/11(水) 16:35:42.80ID:???今再インストール中で確認できないが
0477nobodyさん
2012/01/12(木) 06:51:34.68ID:???0478nobodyさん
2012/01/12(木) 13:41:50.62ID:???http://c-brains.jp/blog/wsg/11/12/08-114554.php
0479nobodyさん
2012/01/12(木) 20:06:56.05ID:srRhUW1K返信サンクス
解決方法探し当てた。
http://d.hatena.ne.jp/cakephper/20100826/1282798441
0480nobodyさん
2012/01/13(金) 01:39:04.98ID:ayVGOPQuコントローラーの中で動的に変更したい場合どうすればいいですか?
0481nobodyさん
2012/01/13(金) 17:22:59.89ID:???<input name="data[Post][title]"
じゃなくて
<input name="title"
になっている場合があるのですが、
これって単にフォームヘルパーを使ってないだけですかね?
それともフォームヘルパーでnameを配列にしない方法があるのでしょうか?
0482nobodyさん
2012/01/13(金) 18:28:21.82ID:???0483nobodyさん
2012/01/14(土) 21:18:17.06ID:???そのまま添字付けることって可能?
test()['test']
みたいな
0484nobodyさん
2012/01/14(土) 21:28:07.86ID:???0485nobodyさん
2012/01/14(土) 21:47:35.89ID:???内部的に戻ってきた配列に添字つけて参照するだけだし、
難しそうではないんだけどなぁ
0486nobodyさん
2012/01/14(土) 21:55:23.06ID:???つーかCake関係ないやんそれ
0487nobodyさん
2012/01/15(日) 00:09:42.08ID:???$a = $func();
return $a[$key];
}
0488nobodyさん
2012/01/15(日) 15:39:15.61ID:???こんな感じでURLを丸ごとパラメータとして渡したいんですが
Cakeでやる方法があったら教えてほしいです
0489nobodyさん
2012/01/15(日) 16:40:34.32ID:???0490nobodyさん
2012/01/16(月) 17:55:18.55ID:l7Fd5fgUhttp://www.php-compiler.net/blog/2012/net-interoperability-overview-of-phalanger-3-0
0492nobodyさん
2012/01/17(火) 00:47:37.68ID:???$this->updateAll(array('aaa' => 1, 'bbb' => 2), array('ccc' => 3));
だと失敗して
$data = $this->find('first', array('conditions' => array('ccc' => 3), 'field' => array('id')));
$data['ModelName']['aaa'] = 1;
$data['ModelName']['bbb'] = 2;
$this->save($data);
だと成功する。今まで2年ぐらいCake使っててこういうの初めてで、何故だかわからないんだけど
わかる人いる?
0494nobodyさん
2012/01/17(火) 01:37:40.29ID:???http://stackoverflow.com/questions/4488945/cakephp-updateall-not-working
0495nobodyさん
2012/01/17(火) 02:50:02.37ID:???PHPUnitでそのモデルをテストすると
Fatal error: Class 'Component' not found in /path/to/Controller/Component/HogeComponent.php on line xx
と怒られる。
ちなみにモデル内でのコンポーネントの呼出はこんな感じ。
App::uses('HogeComponent', 'Controller/Component');
$hoge = new HogeComponent(new ComponentCollection());
Call Stackの最後にはinclude( '/path/to/Controller/Component/HogeComponent.php' )とあるんだけど
これはコンポーネントのインクルードでなにか問題があったということかな?
コンポーネントが見つかりませんというエラーメッセージについて分かる人いたら教えてください。
0496nobodyさん
2012/01/17(火) 02:58:24.75ID:7jQnUKTcApp::uses('Component', 'Controller');
と付け加えればよいのでは?
0497nobodyさん
2012/01/17(火) 04:10:42.74ID:???モデルでコンポーネント使う設計についてはもはや何も言うまい
0499nobodyさん
2012/01/17(火) 11:04:16.23ID:7jQnUKTcCakePHPは、2になってクラス階層を意識する場面が多くなったと思う。
2.1ではさらにその傾向が強くなっている。
2で開発しているのだったら、今のうちに2.1にアップグレードしておくのをおすすめする。
0500nobodyさん
2012/01/17(火) 15:19:00.74ID:???リリースによれば2.0と完全後方互換があるらしいけど
0501nobodyさん
2012/01/17(火) 16:07:54.57ID:???0503nobodyさん
2012/01/17(火) 20:03:02.72ID:???0504nobodyさん
2012/01/17(火) 20:24:27.94ID:???http://awabi.2ch.net/test/read.cgi/poverty/1326781620/
0506nobodyさん
2012/01/17(火) 21:29:13.39ID:???0507nobodyさん
2012/01/17(火) 23:25:43.99ID:???でも1.x系の開発経験あれば、マイグレーションガイドを見つつ書いていけば何とかなる
何とかならなかったときにはこのスレがある
0508nobodyさん
2012/01/18(水) 11:54:09.09ID:1MLy4CWB問題は、既存の資産が直接使えなくなったこと。
特にAuthまわりは、完全に変わってしまっている。
これまで、直接 Auth コンポーネントをオーバーライドして機能拡張していたんだけど、すべて書き直して、プラグイン化した。
*機能拡張の内容は、「ユーザ登録確認メールの送信」「オートログイン」「SSL対応」「権限チェック」。
しんどかったけど、今後のプロジェクト間での使い回しと拡張性が確保できた点では、それなりのメリットが見込めそう。
メール送信も大きく変更された部分だが、これはすばらしい出来。
0509nobodyさん
2012/01/18(水) 14:59:56.52ID:???メール送信や画像アップロードはライブラリ作ってるけど、
Authはフレームワーク全体に関わることだからな
0510nobodyさん
2012/01/22(日) 17:25:08.97ID:MxKFDdQFEmailComponent::templateで指定したファイルの文字コードは
UTF-8もしくはShift-JIS、どちらが正しいのでしょうか?
0511nobodyさん
2012/01/22(日) 22:16:15.47ID:???あとあと楽です。
0512nobodyさん
2012/01/23(月) 00:38:44.40ID:???0513nobodyさん
2012/01/23(月) 06:06:15.69ID:???function edit() {} // 編集アクション
↑8割方同じ処理をしているアクションがあるときどうしてる?
俺はaddに同一処理かいて、
エラーや編集のときの個別処理だけeditに書いてるんだけど、
アクションのURLが違うからエラーでの書き込みフォームに戻る処理などが難しい
editでreturn;するとeditビューが呼ばれてしまう
0514nobodyさん
2012/01/23(月) 11:36:23.68ID:Vo1w/brb'北海道' => '北海道',
'青森県' => '青森県',
'岩手県' => '岩手県',
'宮城県' => '宮城県',
'秋田県' => '秋田県',
'山形県' => '山形県',
'福島県' => '福島県',
'茨城県' => '茨城県',
(中略)
'鹿児島県' => '鹿児島県',
'沖縄県' => '沖縄県'
), 1, array('empty' => null, 'class' => 'orderform')) . PHP_EOL;
と書いたんですが、出力をみると一つ目の北海道にselectedがついてなくて、
<option value="福島県">福島県</option>
option value="茨城県">茨城県</option>
と茨城県だけ頭の<が出ないです
茨城の項目を削除すると、次の栃木の頭の<が消えるので福島が原因かと思ったんですが
福島を消しても栃木が消えるので8個目が消えるという感じかも知れないんですが
解消する方法ご存知でしたらお教えくださいますようよろしくお願いいたします
0515nobodyさん
2012/01/23(月) 12:43:46.65ID:???0517nobodyさん
2012/01/23(月) 16:49:13.48ID:???俺はaddとeditは一緒にaddの中に書いて、idがあるかどうかで条件分岐してるわ
アクション分けたいならfunction _addOrEdit()みたいなのをつくって、共通処理はそこに突っ込めば?
0518nobodyさん
2012/01/24(火) 16:24:41.34ID:???deconstructが効いていない理由がわかりません…助けて。
view:
echo $this->Form->label('birthday', '生年月日');
$minY = date('Y')-100;
$maxY = date('Y')-18;
echo $this->Form->datetime('birthday', 'YMD', null, array('monthNames' => false, 'minYear' => $minY, 'maxYear' => $maxY, 'separator' => array('年', '月', '日')));
コントローラ:
if(!$this->Hoge->save($this->request->data)) {
$this->Session->setFlash('データの登録に失敗しました。');
}
Formヘルパー(separatorの配列対応):
//$opt = implode($separator, $selects);
$opt = "";
$i = 0;
if (is_array($separator)) {
foreach($selects as $select) {
$opt .= $select.$separator[$i];
$i++;
}
} else {
$opt = implode($separator, $selects);
}
0519nobodyさん
2012/01/24(火) 22:58:24.14ID:???手元で検証してみたら、確かにModel::deconstruct()が仕事しなかった。
んで、最新版落っことしてきて、コアの部分をすげ替えたら動いたよ。
cake2最初期版はなんか問題があったんかもしれんね。
ついでにもうひとつ。
FormHelper::dateTime()だけど、引数の取り方変わってるよ。
その書き方でほんとにプルダウン生成されてるかい?
http://book.cakephp.org/2.0/ja/appendices/2-0-migration-guide.html#formhelper
0520519
2012/01/24(火) 23:16:35.15ID:???DBにdate型とかでbirthdayフィールドが存在しなければ
Model::deconstruct()はきっと何もしてくれない。
Model::deconstruct()のメソッド内にある
$type = $this->getColumnType($field);
で有効な値が取れて初めて機能する模様。
なんともはや。。。
0521nobodyさん
2012/01/25(水) 16:31:52.13ID:???これは今後のバージョンで無くすということ?使うなということ?
■ このスレッドは過去ログ倉庫に格納されています