トップページ⇒php
1001コメント313KB

【PHP】フレームワーク CakePHP 14ホール目【v2.1】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/05/01(火) 16:58:44.53ID:fVBzm1/A
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 13ホール目【v2.0】
http://kohada.2ch.net/test/read.cgi/php/1320768310/
0002nobodyさん2012/05/01(火) 17:02:19.22ID:???
落ちてたっぽいから立てたけど・・・大丈夫かな
0003nobodyさん2012/05/01(火) 18:42:40.42ID:???
>>1-2
乙!俺は感謝してるぜ
0004nobodyさん2012/05/02(水) 17:16:24.15ID:???
乙!いきなりDAT落ちしててびっくりしたから・・・

それにしても2.1.1でしかも2.2.0のベータって・・・早すぎだろw
0005nobodyさん2012/05/02(水) 17:30:40.73ID:???
2.1.2使用中で変な事になりました。

Aというコントローラがあります。
> public $uses = 'Bモデル';
という記述がしてあります。

Aのindexページで、
> echo $this->Form->create(null,array('type'=>'post','action'=>'Aのfunction'));

というフォームを作って送信すると、
Aファンクションのページに飛ぶかと思ったらなぜか/Bモデル/Aのファンクション/に飛んで、
当然ながらMissing Controllerが出ます。

indexページのソースを読むとフォーム自体が/B/Aファンクションに飛ぶようになってます。
どなたか原因分かりますでしょうか?
0006nobodyさん2012/05/02(水) 21:41:47.54ID:???
>>1おつ
0007nobodyさん2012/05/03(木) 18:56:39.25ID:2xcwqeF0
cakephpで作ったDBの中身をiphoneアプリからhttpで呼び出すと色々とめんどい?
0008nobodyさん2012/05/03(木) 23:43:44.23ID:???
>>7
簡単ではないけど面倒ってほどじゃないよ。

FlashBuilder(FlexBuilder?)でDBアクセスする方法がそのまま使えるんで、そのあたり調べるといいと思う。

体験版でandroidとかiPhoneのアプリ作り始めてサーバのDBアクセスのサービスを追加するとウィザードでコードを追加してくれるんで、必要な部分だけ流用してもいいかも。
(読み出しだけじゃなくて、追加・更新あたりのコードが全部追加されるので)

倫理的にはやり方だけ理解して自分で作った方が良いと思うけどw

まぁどうしてもcakeで作るなら結局作り直すことになるけどね
0009nobodyさん2012/05/05(土) 19:37:07.62ID:???
プラグインのwebroot直下にPHPファイルをおいて直接アクセスさせたいんだけど無理なのかな?
app/js/plugin_name/file_name.ext
を解釈するから、そもそも直下へのアクセス方法がない??
あばば
0010↑2012/05/05(土) 19:44:03.73ID:???
あ、勘違い臭い。さあせん
0011nobodyさん2012/05/05(土) 20:13:26.25ID:???
アクセスはできるけどPHPとして動かしてはくれないのか
そりゃそうか。そうなのか?まぁ仕方ないや。
0012nobodyさん2012/05/07(月) 04:57:19.77ID:???
バリデーションルールって、そもそもdataにそのカラムのキーが存在しない時はスルーしちゃうのね。
notEmptyスルーするからハマったわ。
requiredにtrueセットすればいいんだろうけど、この場合updateでうざいことになる。
じゃあってんで、onをcreateにして新規のときだけってしちゃうと、
更新時にnotEmptyが効かない=空でもスルーしちゃう

'field' => array(
'notempty' => array(
'rule' => array('notempty'),
'on' => 'update', // Limit validation to 'create' or 'update' operations
),
'notempty2' => array(
'rule' => array('notempty'),
'required' => true,
'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),

こうしろってこと?
相当めんどくさいんだけど
0013nobodyさん2012/05/07(月) 05:06:28.87ID:???
'field' => array(
 'notempty' => array(
  'rule' => array('notempty'),
 ),
 'required' => array(
  'required' => true,
  'on' => 'create',
 ),
),
これでよさげ。これなら許せる。
0014nobodyさん2012/05/07(月) 20:37:16.11ID:???
codeigniterと比較するとバリデーションの可読性が悪いな。
配列が入れ子になってるのが悪い。
0015nobodyさん2012/05/09(水) 22:39:47.65ID:rDWus5fC
CakePHPでGDを使いたいんだけど、viewにそのままGDのコード(色つきの長方形を描くような)
文字化けしてしまいます。
php.iniではUTF8、<?phpの前に余計なものもはいってない状態ですが、
CakePHPでGDを使う際には何か注意すべき点はあるのでしょうか
0016nobodyさん2012/05/10(木) 14:58:57.25ID:???
今後の案件はじめるなら2のほうがいいの?
1.3で作ったシステムがあるんだけどこれからも使える?
0017nobodyさん2012/05/10(木) 15:10:33.63ID:???
>>13だめだったrule設定がないと確実にそのバリデーションがエラーになる。
0018nobodyさん2012/05/10(木) 18:33:31.10ID:???
>>16
「何で」作るかじゃなくて「何を」作るかだと思います。
0019nobodyさん2012/05/10(木) 18:52:33.46ID:???
はぁ?あれは1.3で作ったほうがいいがこれは2で作った方がいいとかあるの?
0020nobodyさん2012/05/10(木) 19:10:29.64ID:???
ない
0021nobodyさん2012/05/10(木) 19:11:07.26ID:???
強いて言えば何処の命で作るか。はあるかも。
0022nobodyさん2012/05/10(木) 22:59:50.95ID:???
参考になるかわからないけど、以前からCakePHPを採用している会社は新規案件も1.3だったけど、うちは1.xの実績ないから2.x採用してる
0023nobodyさん2012/05/10(木) 23:19:54.66ID:eaLKfNi7
cakephp1.3でボタンにロールオーバーさせたいんだけどうまくいかない。
smartRollover.js使って画像を_onと_offできりわけたいです。

だれかご教授くださいお願いします。
0024nobodyさん2012/05/11(金) 03:36:35.15ID:???
cake関係ないので嫌です
0025nobodyさん2012/05/11(金) 16:05:50.69ID:???
cssでやれよ
0026nobodyさん2012/05/13(日) 22:01:55.09ID:???
cakePHP2.0 を使っています。
現在、cakePHPのsave()を使ってupdateしようと
思っているのですが、そもそも更新対象のテーブルに主キーが2つある場合には
どうしたら更新(update)させる事が出来るのでしょうか?
(saveはinsertとupdateを自動で判定するそうなのですが
下記コードだと常にinsertが走ってしまい主キー違反エラーが出てしまいます。)


■table(hoge)
p_id_1 (int) 主キー
p_id_2 (int) 主キー
name (varchar)

■php
$p_id_1 = 11;
$p_id_2 = 22;
$name = "ななし子";

$hoge_data = array(
  'hoge' => array ('p_id_1' => $p_id_1,'p_id_2' => $p_id_2,'name' => $name));
$this->hoge->save($hoge_data);
0027nobodyさん2012/05/13(日) 22:10:28.52ID:???
主キーが2つ???
0028nobodyさん2012/05/14(月) 00:40:01.29ID:???
ありえない
0029nobodyさん2012/05/14(月) 00:42:24.81ID:???
完全に設計が破綻しています。本当にあry
0030nobodyさん2012/05/14(月) 02:26:11.78ID:???
>>27
複合キーです。
0031nobodyさん2012/05/14(月) 02:30:08.93ID:???
複合キー cakephp で検索
0032nobodyさん2012/05/14(月) 07:19:59.81ID:???
このスレの奴は複合キーを知らないから聞いても無駄だな
0033nobodyさん2012/05/14(月) 08:45:36.04ID:???
主キーを複合キーにするとか(笑)
0034nobodyさん2012/05/14(月) 09:36:14.55ID:???
CakePHP は複合主キーをサポートしません。

ってcookbookに書かれてるよ。
0035nobodyさん2012/05/14(月) 12:33:16.59ID:???
>>34
ありがとうございます。
諦めて delete / insert する事にします。
0036nobodyさん2012/05/14(月) 13:44:42.79ID:???
SQL直書きすればいいだろ
0037nobodyさん2012/05/14(月) 17:04:15.72ID:???
ビューの$paginator->prev('前へ')、$paginator->next('次へ')で
それぞれリンクが無くてもテキストとして表示されます。
これをリンクがない場合はテキスト自体表示しないようにするには
どうすればいいのでしょうか?
0038nobodyさん2012/05/14(月) 19:06:42.56ID:???
CakePHP+MySQLのシステムで、
DBのテーブル構成を、モデルから管理する方法で既存のもの何かないでしょうか

モデルのコンストラクタで、CREATE TABLE IF NOT EXISTする
カラムの追加なんかもソースに記述し、ソースに合った最新の状態になるようにALTER TABLEする
もちろん、不要であれば何もしない

こういうのがあれば理想ですが、自分で作るしかない?
0039nobodyさん2012/05/14(月) 19:33:49.99ID:???
DB設計見なおすべき。
そんな気軽にてーぶるいじらないでよ
0040nobodyさん2012/05/15(火) 00:22:17.46ID:???
>>38
ぐぐればいいじゃない
0041nobodyさん2012/05/15(火) 11:38:58.08ID:???
せめてcake shemaでも使うようにすれば?
0042nobodyさん2012/05/17(木) 22:55:40.27ID:JCS/4U80
Hogeモデルから
hoge、foo、barってテーブルから連結したデータを取るとき
CASEとかCOUNTした値を
バーチャルフィールドで取得するとき
Hogeの配列では取得できるんだけど
Fooの配列にいれることってできる?

バージョン2.1.2です。
0043422012/05/18(金) 01:47:39.34ID:???
ゴメソ。自己解決しました。

$this->virtualFieldsをモデルで読んでたけど
コントローラーから$this->Foo->virtualFields
にしたらいけました。
0044nobodyさん2012/05/18(金) 21:14:27.21ID:???
>>1
cakeqs.orgのリンク消えてるけど?
0045nobodyさん2012/05/19(土) 01:18:11.81ID:???
>>44
1年くらい前につぶれた気がする
もう少し前かも
0046nobodyさん2012/05/19(土) 02:33:20.31ID:???
オワコンだからねー
0047nobodyさん2012/05/19(土) 10:28:02.36ID:o1Jo2iU0
初心者的な質問で悪いんだけど
Zhen CRM
http://bakery.cakephp.org/articles/telerim/2012/04/13/zhen_crm_open-source_cakephp_crm_application
このオープンソース使用してホームページを作成して
販売するのはOK?
GNUライセンスとかMITライセンスとかも関係するの?

板違うかな?
0048nobodyさん2012/05/19(土) 11:34:56.04ID:???
MITライセンスだと販売・改変はOKだよ
0049nobodyさん2012/05/19(土) 15:18:26.07ID:MiaPSFRR
>>48 どうも乙です。
0050nobodyさん2012/05/19(土) 16:54:10.65ID:???
cakephpでシステム関係のファイルなどはドキュメントルートの外に起きたいんだけど
zend frameworkとかcodeigniterとかyiiみたいに個別にパスを設定して変更できないの?
0051nobodyさん2012/05/19(土) 18:18:21.47ID:???
>>50
できるよ。マニュアルの最初の方に書いてあるはず
0052nobodyさん2012/05/19(土) 22:45:43.88ID:???
>>50
それってindex.phpでいじるやつでそ?
APP_DIRとかROOTとかあるけど
pluginsとかvendorsの項目が見当たらないんだが
0053nobodyさん2012/05/19(土) 22:46:01.99ID:???
>>50じゃなくて>>51宛て
0054nobodyさん2012/05/20(日) 00:25:07.80ID:???
質問なら何をやりたいのか省略しないできちんと書いてや
pluginとかvendorsをどうしたいの?
0055nobodyさん2012/05/20(日) 10:21:18.74ID:???
>cakephpでシステム関係のファイルなどはドキュメントルートの外に起きたいんだけど
0056nobodyさん2012/05/20(日) 10:56:14.49ID:???
全部ドキュメントルート外において、wwwrootをドキュメントルートに指定しろ
そしてもう来るな
0057nobodyさん2012/05/20(日) 11:00:27.81ID:???
バカが質問をよく読まないで回答しようとするからこうなる
0058nobodyさん2012/05/20(日) 11:35:51.12ID:???
バカなのに死なないで生きているからこうなる
0059nobodyさん2012/05/20(日) 14:29:53.88ID:???
>>55
だからその「システム関係のファイル」ってなんだよ?
cakeのコアのことならマニュアルに書いてある通りだし、>>56の言う通りだ。

vendorsやプラグインも個別にどこにでも好きなところに置けるけど、
>>50 には一言も書いてねえし
0060nobodyさん2012/05/20(日) 19:10:25.50ID:FJzAEkIA
cakeってファットモデルはあまりやらないほうがいいの?
0061nobodyさん2012/05/20(日) 22:42:21.38ID:???
稼働中のシステムでDBのALTER TABLEをしてそれに合わせてソース更新した場合、前の状態がキャッシュされてて動かない
ことがしばしば起こるんだけど、自動でキャッシュ更新する方法ありませんか?
キャッシュはmemcachedを使っています
0062nobodyさん2012/05/21(月) 10:35:51.06ID:???
>>60
ロジックをコントローラでなくモデルに書くってことか?
個人的にはそうすべきだと思う。
0063602012/05/21(月) 20:21:34.67ID:???
>>62
$this->Model->find('all')
みたいなやつでもモデルに書くようにしてる?
0064nobodyさん2012/05/21(月) 21:42:06.73ID:???
ケースバイケースだな。
何度も使う場合は書くけど、そうでない場合はコントローラで済ます
0065602012/05/22(火) 01:03:15.16ID:???
>>64
ありがとう。

複雑なクエリや、他のコントローラーから呼ぶようなやつはファットモデルにするよ。
規約は守ってもフレームワークだからって型に縛られないようにするよ。
0066nobodyさん2012/05/22(火) 02:11:52.42ID:???
>>61
テーブルに変更が加えられたかどうかをチェックしてしまったらキャッシュしている意味がなくなるから原理的にそれは出来ないんじゃないかな
俺は手動で消してる
0067nobodyさん2012/05/22(火) 02:26:56.79ID:???
ランキングやトピックスは随時更新じゃなくて、一定期間で更新だよな
一定期間毎にキャッシュを作っていると思うけど、その形で良いと思う
0068nobodyさん2012/05/22(火) 05:21:12.26ID:???
>>66
手動でどうやって消してますか?
全部消せば簡単だけどそうすると今アクセス中の客のセッションデータが吹っ飛ぶ
更新したいキャッシュだけ消す簡単な方法あります?というかどのキャッシュを消せば良いのか
0069nobodyさん2012/05/22(火) 10:21:13.32ID:???
それはマニュアル見ろとしか言えないな
0070nobodyさん2012/05/22(火) 12:26:33.17ID:mOE2ZVav
フォームによってモデルの必須条件を適宜変えたいんだけど、どうしたらいいんだろう
0071nobodyさん2012/05/22(火) 12:58:54.36ID:???
>>70
2.2で ModelValidatorを使う
http://book.cakephp.org/2.0/en/models/data-validation.html

もしくはいくつかバリデーションルールを作っておいて、コントローラーでvalidateのフィールドを指定する
http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html

て感じかしらん
0072682012/05/22(火) 14:05:53.81ID:???
んー、なんか今Cakeのマニュアル見れないなあ
なんか見れるページと、見れないページがある、どうなってんだ
とりあえず助言ありがとう
0073nobodyさん2012/05/22(火) 14:21:04.35ID:???
しかもDB構造のキャッシュについては載ってなさそうだなあ
仕方ないソース見るか…
0074nobodyさん2012/05/23(水) 18:18:16.24ID:???
1.3で開発してるアプリケーションを2.xに変更しようと思ってるんだけど大変かな?
コントローラ20個、モデル15個ぐらいの規模なんだが
パッと手直しするだけで移行できる?
0075nobodyさん2012/05/23(水) 18:26:46.04ID:???
もう少し様子見た方が良いと思うけどな。今は情報少ないだろ
自分だけで使うなら別だが、仕事だと1.3で良いと思うよ
0076nobodyさん2012/05/23(水) 22:27:57.51ID:???
コントローラー3個のサイトでさえ移行めんどくさい
でも新規サイトは2.xで作ってるから古いサイトのメンテナンスするときに混乱する
でも移行したくない
0077nobodyさん2012/05/24(木) 17:42:05.60ID:???
2.1を使用中です。

例えば$tmp = "5,2,3,4,1"と言う並びを記憶した文字列があったとします。

それを$id_order = explode(',",$tmp);として、
$this->Hoge->find('all',array('conditions'=>array('id'=>$id_order)));
として読み出します。読み出し自体は5件、ちゃんと拾ってきます。

ただこの場合、そのままだとid順に並び変わってしまうんです。
(この場合だと 1 2 3 4 5 に並び変わってしまう)
そのまま5,2,3,4,1の順を保持するようには出来ないのでしょうか?
queryで id IN (5,4,3,2,1)も試してみたのですが、やはりID順で並び変わってしまいます。

Hogeそのものにorder用のフィールドを準備して並び替えれば当然出来るんですが・・・

今は配列を全部読んで新たに配列を作成するという力技でやっているのでうまい方法は無いかと思いまして・・

Cakephpとは関係ない様な気もしますが参考意見でもあれば宜しくお願いします。
0078nobodyさん2012/05/24(木) 18:35:37.61ID:???
>>77
SQLはorderを指定しないと読み出し順は保証されないよ
たまたま1,2,3,4,5になるかもしれないし、そうでないかもしれない。
だからちゃんとfindのオプションでorderを指定すべき
0079nobodyさん2012/05/25(金) 19:14:24.25ID:???
2.0で組んでます。
Componentから呼び出した、他のComponentのinitializeが、
実行されないんだけど、実行されるようにする方法はないですか?
0080nobodyさん2012/05/25(金) 19:20:46.92ID:/BxfQcHO
勉強しはじめの者です。

XAMPPを起動させて、webrootフォルダの中のindex.phpにログインは出来るし、
index.phpを他に移動させて前の場所のアドレスを入力すると見えなくなるのですが
(http://localhost/cake/sample/index.php)

webrootフォルダの中にindex.htmlやindex2.php等を作って、
http://localhost/cake/sample/index2.php をブラウザで表示させようとしても表示できません。

これはなぜなのでしょうか?教えていただけると助かります。
0081nobodyさん2012/05/25(金) 19:51:57.57ID:???
>>80
普通は表示できると思うんだけど。
Apacheのエラーログ見たら?
0082802012/05/26(土) 00:55:32.99ID:???
>>81様

レスありがとうございます。
エラーログで分からなかったので、XMAPPもCAKEPHPもインストールし直したら解決しました。
0083nobodyさん2012/05/26(土) 13:28:16.83ID:???
>>70-71
これを1.3で実現したいんですけど、何か方法はありますか?
0084nobodyさん2012/05/26(土) 16:30:05.31ID:???
id以外のPrimaryKeyを指定できるのは、2系だけですか?
0085nobodyさん2012/05/26(土) 18:04:32.93ID:???
>>84
1系でも出来る
0086nobodyさん2012/05/27(日) 00:59:00.50ID:???
>>78
おっしゃるとおりです。

あれから調べた所、MySQLである限りはorder by fieldが使用できるので、
http://cakebaker.42dh.com/2008/06/10/order-by-field/
の形でやればいちいち取得後に並び替え処理しなくても
最初から指定の順で並び替えた状態で取得できそうです。

ありがとうございました。
0087nobodyさん2012/05/28(月) 15:42:04.62ID:???
JsonView だと Forbidden になる現象遭遇した人いませんか?
2.1 です。
0088nobodyさん2012/05/28(月) 21:49:33.64ID:???
Apache の MIME type が原因でした。
0089nobodyさん2012/05/30(水) 00:22:24.86ID:???
本を見て勉強中なのですが

<?=$form->create(null,array('type'=>'post','action'=>'.')) ?>

等のように、
<?=
から始まるコードがあります。これをこのまま本の通りに入力するとエラーになってしまうのですが

これは、
<?php echo
と同じ意味なのでしょうか?

「<?php echo 」と書くと長いから「<?=」と書いているけど、コードを書くときは「<?php echo」に直してね
っという事なのか
私の書き方や設定がおかしいから「<?=」でエラーが出るだけで、何かをすれば「<?=」でもエラーが出ないのか?

教えていただけると助かります。よろしくお願いします。
0090nobodyさん2012/05/30(水) 01:40:42.57ID:???
流れ関係ない質問ですが
マニュアルに書いてないことを知るには、ソースを読めですか?
0091nobodyさん2012/05/30(水) 02:22:35.21ID:???
>>89
cakeは関係ない。php自体のshort_open_tag設定

>>90
生ソースの前にAPI一覧を見るといいよ
こんなメソッドあったのか。なんてのも結構あるし。
それで使い方気になったらソース見ていく。って感じで俺はずいぶん勉強になったよ
0092nobodyさん2012/05/30(水) 14:54:21.85ID:???
バリデーションの切り替えの質問したものだけど、
$this->User->validates(array('fieldList' => array('email', 'password'))
こういう方法もあるんだね。
これでよかった。
0093nobodyさん2012/05/30(水) 15:08:29.89ID:???
ちなみに1.3で日本語のブックには載ってない方法だった
0094nobodyさん2012/06/01(金) 10:14:16.75ID:???
saveした際にvalidate errorだとviewのformに値が自動的に戻ります。
hasMany tableをsaveAllした際のvalidate errorだと、formに値が自動的に戻りません。

saveAllのvalidate errorの場合は手動でformに入力値を展開するものですか?
流儀があれば教えて頂きたいです。
0095nobodyさん2012/06/03(日) 01:26:40.50ID:???
bakeというものを使おうとしたのですが

コマンドプロンプトでパスを設定後、
cake bake でデータベース設定しようとすると
最後にエラーになってしまいます。

Look okay? (y/n)
[y] > y
Do you wish to add another database configuration?
[n] > n

Creating file c:\xampp\htdocs\cake\baking\myapp\config\database.php
Wrote `c:\xampp\htdocs\cake\baking\myapp\config\database.php`

どうしたら直るでしょうか?教えていただけると助かります。
よろしくお願いいたします。
0096nobodyさん2012/06/03(日) 02:03:55.13ID:???
>>95
エラーはどこ?
0097nobodyさん2012/06/03(日) 05:21:06.99ID:???
>>96
95の頭
0098nobodyさん2012/06/03(日) 13:48:18.75ID:???
あ?エラーが出てるならエラーメッセージを貼れつってんだよ
0099952012/06/03(日) 15:48:10.86ID:???
失礼しました。

Creating file c:\xampp\htdocs\cake\baking\myapp\config\database.php
Wrote `c:\xampp\htdocs\cake\baking\myapp\config\database.php`

ではなく

Fatal error: Class 'DATABASE_CONFIG' not found in C:\xampp\htdocs\cake\baking\ca
ke\console\libs\tasks\db_config.php on line 260

でした。
0100nobodyさん2012/06/03(日) 16:18:04.08ID:???
でーたべーすこんふぃぐがねえんじゃねえのー?
0101nobodyさん2012/06/04(月) 11:18:57.14ID:???
ええ・・・
$form->input()
でしかエラーを自動で表示してくれないって知ってた?
$form->radio()
じゃ表示してくれない。

今初めて知った・・・めちゃハマってたわ・・・くそが
バーションは1.3
■ このスレッドは過去ログ倉庫に格納されています