【PHP】フレームワーク CakePHP 2ホール目
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/11/14(水) 02:50:28ID:???http://www.cakephp.org/
10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0056nobodyさん
2007/11/24(土) 04:17:02ID:???0057nobodyさん
2007/11/24(土) 07:36:32ID:???テンプレートだけ作ってコントローラから何々の部分のメッセージを設定して
renderればいいんじゃないのん
0059nobodyさん
2007/11/24(土) 14:44:27ID:+GWOZRBH○ログインしている場合
view/layout/default.thtml に
if($_SESSION['Login']['email'] != ''){ $this->render('loginok.thtml');}
(ログイン中のエレメントを表示させる)
○ログインしていない場合
view/layout/default.thtml
if($_SESSION['Login']['email'] == ''){ $this->render('loginng.thtml');}
(ログインしてね♪ボックスを表示させる)
という処理でわけてますね。
わかりやすいし、いいと思いますよ。
0060nobodyさん
2007/11/24(土) 16:57:12ID:???エレメントにしておいて、コントローラで切り替えるってのはいいかも。
0061nobodyさん
2007/11/25(日) 03:26:25ID:???<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。')みたいだったやつ。
Modelでメッセージ内容決められるようになったから。
あとエラーって一個ずつしか出ないけどまとめて表示とか出来ないの?
<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
0062nobodyさん
2007/11/25(日) 08:44:45ID:???$form->input()を使えばエラーも一緒に表示されるようになる。
エラー文はmodelでも指定できるし、今まで通りControllerでも
指定できるけど、tagErrorMsgは無くなったので、inputの第二引数に
messageとして渡してあげればOK。
一個のinputに対してエラーを全部表示するのはコアを触らないと
無理じゃないかな。よく知らん。
0063nobodyさん
2007/11/25(日) 20:28:15ID:???一個ずつしか出ないならJavascriptの使用を強制してエラー出してあげるしかないかな
0064nobodyさん
2007/11/25(日) 22:38:25ID:???0065nobodyさん
2007/11/26(月) 00:36:21ID:???0066nobodyさん
2007/11/26(月) 21:19:27ID:???0067nobodyさん
2007/11/26(月) 21:32:38ID:g6VI9o/i0068nobodyさん
2007/11/26(月) 22:20:15ID:???0069nobodyさん
2007/11/26(月) 22:37:57ID:9laXyXH+0070nobodyさん
2007/11/27(火) 00:22:24ID:???0071nobodyさん
2007/11/27(火) 04:42:44ID:???細かい部分で変な仕様っていうか不具合っていうか
いまいちな動作するよねえ
validationとかsaveとか
おかげでソースとにらめっこで時間かかる…
0072nobodyさん
2007/11/27(火) 07:25:54ID:q198YkJr0073nobodyさん
2007/11/27(火) 09:33:56ID:???saveはidも更新されちゃうとかか?
0074nobodyさん
2007/11/27(火) 11:12:10ID:O5dAXXRhテーブル名が「prefix_テーブル名」の時は「prefix_テーブル名_id」となるんでしょうか?
また、テーブル名は複数形ですか?
0075nobodyさん
2007/11/27(火) 21:07:05ID:???0076nobodyさん
2007/11/27(火) 21:16:36ID:???そこまでまだ使いこんでない
>>73
2は少しよさそうだね
なんかわかりにくいというか 仕様が曖昧だよね
まあ楽につくろうっていうのが趣旨だからしかたないのかもしれない
もうちょっといじってみる
0077nobodyさん
2007/11/27(火) 22:46:38ID:???日本人じゃないから仕方が無いけど、
単数と複数の意味を考えよう。
テーブルとは、レコードの集まりだ。
で、一つのレコードは、一つのもの。つまり単数だ。
だからレコードのID・・・つまり一つのもののIDなのだから
単数形_IDになる。
そしてその集まりであるテーブルは当然複数形となる。
ついでにいうと、テーブルのレコードに相当するModelは当然単数形だし、
そのモデル(単数)の一覧(複数)を表示したりするコントローラは複数形となる。
単数形と複数形の使い分けはこんな感じ、
あと残りの単語の区切りがアンダーバー区切りか頭大文字かはクラス名は頭大文字
ファイルやテーブルはアンダーバー区切りとなる。
0078nobodyさん
2007/11/28(水) 00:30:00ID:???テーブル B hasAndBelongsToMany A
のときの A のデータの編集(新規追加)画面を作ってる
Aの編集画面で、Bのデータを持ってきて表示・選択できるところまでできた
で、Aのデータをsaveするときに、Bのデータのsaveとかvalidatesは自動でやってくれるの?
この辺り、いまいちややこしいなああ
0079nobodyさん
2007/11/28(水) 01:03:43ID:???続きだけど
この場合、自前でvalidatesするときはどこでするの?
AとBを関連づけるための A_Bテーブルも作ってるけど A_Bモデルでやるのかな?
それともAモデル?
Bモデルだとデータの形式が違うから AモデルかA_Bモデルだとは思うんだが…
0080nobodyさん
2007/11/28(水) 03:05:53ID:k8OzrBLtコントローラ内で
pr($this->User->invalidFields());
とかってやるとちゃんとvalidateは行われているようなんですが・・・
0081nobodyさん
2007/11/28(水) 14:51:33ID:Zvh5a2INどうなんすか。先輩方。
0082nobodyさん
2007/11/28(水) 15:01:13ID:???ただの一枚のphpファイルだけで完結するものと
データベースにアクセスするものを比べたら
そりゃ重いのは当然だと思うが?
0083nobodyさん
2007/11/28(水) 15:18:31ID:???0084nobodyさん
2007/11/28(水) 20:51:41ID:???0085nobodyさん
2007/11/28(水) 21:56:36ID:???0086nobodyさん
2007/11/29(木) 17:42:41ID:IwtVKe0+フレームワークcakephpを使ったプログラムと
普通にベタ書きでプログラムを書くのと比べて。
0087nobodyさん
2007/11/29(木) 18:11:52ID:???0088nobodyさん
2007/11/29(木) 21:15:28ID:???0089nobodyさん
2007/11/30(金) 18:57:34ID:uOWFJHM3fatal で 30秒どうのこうの・・・というエラーが出るんですよ。
更新キーを押してもなかなか表示しなかったり。
キャッシュ使わないときついんですかね。cakephp。
プログラムのみならある程度いけるんですが、画像使うともう厳しいくらい重いですね。
なんか良い方法ないでしょうか。
0090nobodyさん
2007/11/30(金) 20:08:26ID:???0091nobodyさん
2007/11/30(金) 21:45:10ID:uOWFJHM3ありがとうございます。
今でました。
Fatal error: Maximum execution time of 30 seconds exceeded in /home/hoge/www/hoge/cake/libs/session.php on line 154
セッション周りがおかしいんですかね〜。
ちなみにcakephp1.1 サクラサーバーのプロっていうレンタルサーバーですね。
レンタルサーバーでも他のプログラムならさくさく動くんですが・・・。
0092nobodyさん
2007/11/30(金) 21:53:08ID:???0093nobodyさん
2007/12/03(月) 19:35:14ID:???0094nobodyさん
2007/12/04(火) 19:21:59ID:???0095nobodyさん
2007/12/04(火) 19:35:56ID:5jWwGUYJ0096nobodyさん
2007/12/04(火) 19:52:21ID:???話が変わってしまって申し訳ないけど、
1.2のcake/libs/session.phpの470行目
$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?
1.1だと
$config = CONFIGS . CAKE_SESSION_SAVE . '.php';
ってなってるし。
ticket出したいけど英語ができない・・・orz
0097nobodyさん
2007/12/04(火) 20:01:17ID:???$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?
をそんまま訳せばいいだろw
0098nobodyさん
2007/12/04(火) 21:09:42ID:???全然話違うけど、フォームの確認画面はググってすぐ見つかる方法くらいしかないんだろうか。そもそもcake使っているものに確認画面が見当たらない
0099nobodyさん
2007/12/04(火) 22:56:12ID:???運がよければいいことがあるぜ!
http://localhost/users/deletel/1
0100nobodyさん
2007/12/05(水) 01:13:52ID:???0101nobodyさん
2007/12/05(水) 13:38:48ID:???心優しい奴だな
0102nobodyさん
2007/12/05(水) 15:45:18ID:???0103nobodyさん
2007/12/05(水) 19:21:03ID:???0104nobodyさん
2007/12/06(木) 08:26:19ID:???0105nobodyさん
2007/12/08(土) 10:30:04ID:???IE6で見たらなぜかクラス一覧が表示されないんだが
これって漏れのPCだけ?
IE7とかFirefoxであれば普通に表示されるからそっちで見てるんだけど・・・
セキュリティ設定の問題かなと思って低めにしたけどやっぱ表示されねぇw
なんでや〜〜〜?
0106nobodyさん
2007/12/08(土) 11:38:27ID:???0107nobodyさん
2007/12/11(火) 11:02:44ID:???のeditのsaveの引数はなぜ
$this->dataではなく$this->data['Post']なのでしょうか?
0108nobodyさん
2007/12/11(火) 12:31:59ID:fmpEROAGタイトル:
<?php echo $html->input('Post/title', array('size' => '40'))?>
っていうのは $this->data['Post']['title'] に格納されるから。
ようは $this->data['Post'] ってのは Postモデルのデータってこと。
よくわからなければ まず pr($this->data); をやってみるとセクシーになるよ。
0109nobodyさん
2007/12/11(火) 15:27:06ID:???0110nobodyさん
2007/12/11(火) 15:43:20ID:???0111nobodyさん
2007/12/11(火) 15:53:50ID:???意図的に404エラー出したいときはどうすればいいですか?
AppController内で404エラーページを表示する共通のメソッドがあるんだけど
どうもうまくいかないっす
$this->cakeError('error404', array(array('url' => ???)));
こんな感じかなあという感じなんですけど
???の部分がわからない
$this->cakeError('error404', null);
とかにすると $param['url'] か $param['action'] がないっておこられてしまいます
デフォの404エラーページが表示できればいいんですけど
なんかいい方法ないですかあ?
0112111
2007/12/11(火) 15:55:13ID:???HTTPステータスコードが404にならないと思うので…
よい方法があればおたすけください…
0113107
2007/12/11(火) 15:58:30ID:???ありがとうございます。それは理解しているつもりなのですがaddの時は
$this->Post->save($this->data)
でeditの時は
$this->Post->save($this->data['Post'])
なのはどうしてでしょうか?実際$this->Post->save($this->data)でも
更新されるようですし。
0114nobodyさん
2007/12/11(火) 17:40:19ID:MudQMHo6うまくフレームワークとなじませられないというか・・・。
0115nobodyさん
2007/12/11(火) 18:05:21ID:???ソース見たらURLは単にメッセージ表示のために使われているだけみたいだから
こんなのでもいいんじゃないの? cake 1.2 pre-betaの場合。
$this->cakeError('error404',array(array('url'=>'アドレスバーに書いてあるURLミロ')));
0116111
2007/12/11(火) 18:17:07ID:???レスありがとうです
やっぱりそんな感じになりますかあ
AppControllerに書く場合、URLは $this->here とかでいいんでしょうか?
なんかしっくりこない気がするんですけど
他にもよい方法ありましたらよろしくおねがいします
0117nobodyさん
2007/12/11(火) 19:24:00ID:???無能
0118nobodyさん
2007/12/11(火) 21:21:49ID:???書き方の違いでしょ。
この例の場合はどちらでもOKだと思う。
二つ以上のモデルに格納するデータをフォームから送るなら
$this->dataにすべきだね。
0120111
2007/12/12(水) 00:43:10ID:???しかし決めつけはひどいな 別人だよ
>>117
おまえが無能だ
んで、フォーラムにでてるように array(array('url' => 〜)) をつかうとうまくいかない場合ある
array(array(action)) つかったほうがいい
しかし、この辺りがCakePHPはなんかいまいちスマートじゃないね
0121nobodyさん
2007/12/12(水) 13:47:30ID:fuv5QvzRcake2日目ではまってまっすん
0122nobodyさん
2007/12/13(木) 02:11:34ID:???0123121
2007/12/13(木) 10:54:35ID:???レスありがとうございます。
正規表現ではじくのは考えたのですが、NGワードをDBで管理してあとから追加や削除をできるようにしたいのです。
ヴァリデートに関数呼び出しなどを書く方法はあるのでしょうか?
言葉足らずですみませんです。
0124121
2007/12/14(金) 13:58:00ID:???validate() をオバーライドするか、別途関数を呼び出してチェックすればいいみたいです。
save()の第二引数に falseを指定すれば、save時にヴァリデートしなくなるようです。
0125nobodyさん
2007/12/14(金) 23:47:10ID:dPU6DaHz0126nobodyさん
2007/12/15(土) 02:49:30ID:???自分でModelに複雑なValidationを実装するのかな
0127nobodyさん
2007/12/15(土) 05:19:24ID:Ybu1PDKfActionScriptの方の使い方が難しくて、何かわかりやすいサンプルを探してるんだけど。
具体的にはFlexのMXMLとの連携のコードを全て公開してくれてるところ。
0128cWTrQzhwyu
2007/12/15(土) 05:32:32ID:???0129nobodyさん
2007/12/18(火) 02:17:35ID:???0131nobodyさん
2007/12/18(火) 11:36:32ID:???queryでSQL文が見えてた方が開発効率がよくね?
0132nobodyさん
2007/12/18(火) 19:39:14ID:???0133nobodyさん
2007/12/19(水) 02:24:25ID:???俺はすでにそれじゃだめだな。
CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。
SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。
そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。
0134nobodyさん
2007/12/19(水) 02:34:00ID:???SQL文の拡張のようなことをやっている。
たとえば・・・これは俺が実際に使っている例ではないんだが、
全文検索をするための構文はDBMSによって違う。
しかし、それがなんであれ,
$conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword);
という風にFULLTEXTSEARCH キーワードを条件文に使用できる。
あとはBehaviorのbeforeFindで条件を調べて
DBMSにあわせた適切な構文に置き換えるだけ。
0135nobodyさん
2007/12/19(水) 11:09:58ID:???saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK
0136nobodyさん
2007/12/19(水) 13:28:34ID:???フレームワークそのままの形だけの使い方をしている分にはいいんだけど
データ取得の命令がfindAllがpaginate関数になったりと、
理由はわからなくは無いんだけど、どうも設計に違和感を感じる。
とりあえず、1.2用のコントローラー以外(たとえばComponent)でも
使えるような汎用的なコードを書いておくよ。といっても怪しいけどな。
変なことをしているかもしれん。まあ俺が見つけた方法ということで。
しかし、コントローラ以外からコントローラのpaginate変数を設定したり
paginate関数を読んだりするのが気持ち悪い。
もっとスマートな方法ないのかな。
※$controllerはどこからか取得
$model_name = 'Post';
loadModel($model_name);
$model = new $model_name;
$conditions = array('id' => '> 3');
$controller->paginate[$model_name] = array(
'limit'=>2,
'page'=>1,
'conditions'=>$conditions);
$data = $controller->paginate($model);
pr($data); //検索情報
pr($controller->params['paging'][$model_name]); //ページ情報
0137nobodyさん
2007/12/19(水) 19:37:24ID:nmvrwuDT例えば
blog
ってテーブルがhasManyで
post
ってテーブル持ってて、そのまたさらにhasManyで
comment
ってテーブルを持ってたとする。
普段はそれぞれは一覧で表示したいのでlimitを10くらいに設定してるんだけど、
ブログの一覧からpostとそれに紐付くcommentを全て取得する際に
$this->Blog->findAll();
でコメントだけはlimitを3にしたい。
$this->Post->hasMany['Comment']['limit'] = 3;
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
とか試したけど、もう無理。
何か間違ってる?
0138nobodyさん
2007/12/20(木) 02:56:46ID:???テーブル名を複数形にしない時点で
自分で調べてなさすぎ感が伝わってきて
アドバイスしたい気持ちになれない。
01391/3
2007/12/20(木) 04:06:27ID:XdoaO407ごめんなさい。
誤解を生まないようにもう一度説明すると、
blogs テーブルはBlogモデルの中で
var $hasMany = array('Post' => array('classname' => 'Post', 'limit' => 10));
postsテーブルではPostモデルで
var $hasMany = array('Comment' => array('classname' => 'Comment', 'limit' => 10));
そいで最後に
commentテーブルがCommentモデルでそれぞれ定義されてたとして。
普通はコントローラーで最初に
var $uses = array('Blog', 'Post', 'Comment');
ってやっておいて、
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
でそれぞれ
count($blogs['Posts']);// が10件
count($blogs['Posts']['Comments']);// が10件
入るよね。
01402/3
2007/12/20(木) 04:06:58ID:XdoaO4071.Postを3件だけ取り出したい
2.Commentを3件だけ取り出したい
とすれば、
1のPostのほうは
$this->Blog->hasMany['Post']['limit'] = 3;
なり
$this->Blog->bindModel(array('hasMany' => array('Post' => array('limit' => 3))));
なりしてやればあとは
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
で3件だけPostを取り出せるんだけど、
2に関しては
$this->Post->hasMany['Comment']['limit'] = 3;
をやっても
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
をやっても、
その後
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
これをすると
count($blogs['Posts']['Comments']);
は10件取り出されてしまうんですよ。
01413/3
2007/12/20(木) 04:07:32ID:XdoaO407$this->Blog->findAll()
でblogsテーブルの直下のhasManyは動的にアソシエーションできるんだけど、
そのさらに下のアソシエーションに関しては動的に変更できなくて悩んでるんだけど、
何か決定的に間違ってる?
普通は出来るもんなんだったら、
別のところで自分が途方も無いケアレスミスを犯しててたまたま出来てないだけだってわかるだけでも
対策考えれるからありがたいんですけど。
0142nobodyさん
2007/12/20(木) 04:10:41ID:???>>139の
> そいで最後に
> commentテーブルがCommentモデルでそれぞれ定義されてたとして。
は
> そいで最後に
> commentsテーブルがCommentモデルでそれぞれ定義されてたとして。
~~
の間違いです。
重ね重ねごめんなさい。
0143nobodyさん
2007/12/20(木) 13:00:08ID:rEyzQF0b0144nobodyさん
2007/12/22(土) 00:03:39ID:DskgbOKQダウソしようと思ったけど、有償なんだな
0147nobodyさん
2007/12/22(土) 12:56:47ID:???0148nobodyさん
2007/12/22(土) 13:17:51ID:???dom・i・na・tion
━━ n. 支配; 優勢; (pl.) 主天使.
do・na・tion
━━ n. 寄付; 献血, (臓器などの)提供; 寄贈物; 寄付[義捐(えん)]金; 【コンピュータ】シェアウェアの寄付金[使用料].
0149nobodyさん
2007/12/22(土) 16:00:24ID:???0150nobodyさん
2007/12/22(土) 18:20:28ID:???0151nobodyさん
2007/12/23(日) 03:33:51ID:???共有サーバーにCakePHPを入れたいと思い、アップしてみたのですが、
mod_rewriteの設定で躓いてしまいます。現在の状況は下記のとおりです。
□/
├□cake ←CakePHPのファイルが入っている
│├□app
││├□webroot
│││└□.htaccess ←@
││└□.htaccess ←A
│├□cake
│├□docs
│├□vendors
│└□.htaccess ←B
└□public_html ←ドキュメントルート(変更不可)
└index.php ←C
@
「RwriteBase /app/webroot」を追加
A
「RwriteBase /app」を追加
B
「RwriteBase /」を追加
C
「include('../cake/index.php');」のみを記述
これで実行すると、mod_rewriteが設定されていないように表示されてしまいます。
しかし、サーバー側では正常にmod_rewriteが機能しています。
どのように修正すれば良いのかご教授願います。
0152151
2007/12/23(日) 03:40:29ID:nRcoZlZo0153nobodyさん
2007/12/23(日) 03:44:49ID:w1dc6lHrRwriteBase /app → RwriteBase /cake/app
RwriteBase / → RwriteBase /cake
0154nobodyさん
2007/12/23(日) 03:56:58ID:nRcoZlZo返答ありがとうございます。
変更し、アップしてみたのですが、うまくいきませんでした。
(変更前と見た目に変化なし)
環境を追記します。
OS…Linux
Apache…1.3.37
PHP…5.2.3
MySQL…5.1.20
引き続きよろしくお願い致します。
0155nobodyさん
2007/12/23(日) 07:44:16ID:???なんじゃ、それ?
HTTPで公開してるのは、public_html ディレクトリだろ?
まず、そこに、.htaccessがなきゃ話にならんだろ。
さらに、RwriteBaseってのは、クライアント側から見えるURLを書く物で、まるで理解してない。
つか、Apacheのマニュアル読んでるの?
■ このスレッドは過去ログ倉庫に格納されています