【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/
0073nobodyさん
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のマニュアル読んでるの?
0156nobodyさん
2007/12/23(日) 08:29:31ID:nRcoZlZo色々な問題をごちゃ混ぜにして考えていたようです。
0から勉強しなおしたいと思います。
public_htmlにapp,cakeフォルダなどをアップし、app/webrootフォルダ内の
.htaccessに>>151のBの内容を追加したところ、
(多分)問題なく動作することを確認しました。
ご迷惑をお掛けし申し訳ありませんでした。
0157nobodyさん
2007/12/23(日) 08:41:22ID:???おい。
HTTPで公開してるディレクトリに、cakeディレクトリ以下は、"置かない"。安全性が落ちる。
"アップし"なんて書いてるとこ見ると、ローカルに開発用のHTTPサーバも持ってないのか?
それは、共有サーバを使ってる他の人にとって、"迷惑"。
0158nobodyさん
2007/12/23(日) 14:49:20ID:???0159nobodyさん
2007/12/23(日) 15:49:17ID:???0160nobodyさん
2007/12/23(日) 16:24:59ID:nRcoZlZoうまくいきました。
/
/cakephp
/cake ← cakeフォルダ(appと並んでいたほう)
/public_html ← appフォルダをリネーム
/vendors
/public_html ← ドキュメントルート
/css,files,img,.htaccessなど、app/webrootディレクトリに入っていたフォルダやファイル一式
上記のように各ファイルを設置し、
ホームディレクトリの.htaccessに「RwriteBase /」を追加し、
同階層のindex.phpのROOT,APP_DIR,CAKE_CORE_INCLUDE_PATHをそれぞれ
「DS.'path to cakephp'.DS.'cakephp'」「'public_html'」「ROOT」にし、解決しました(多分)。
>>157
ローカルでテストしていました。
紛らわしい言い方をして申し訳ありませんでした
0161nobodyさん
2007/12/23(日) 16:26:57ID:nRcoZlZo○ドキュメントルート
0162nobodyさん
2007/12/23(日) 18:29:45ID:???しかも成功したのか
俺が間違ってるのか
0163nobodyさん
2007/12/23(日) 18:32:41ID:nRcoZlZoすいません、Rewriteでした。
最初の文章をコピペしてたのでずっとRwriteと書いていました・・
0164nobodyさん
2007/12/23(日) 18:51:21ID:???狐につつまれて(←何故か誤用)ただけだから
0165nobodyさん
2007/12/23(日) 19:41:40ID:???0166nobodyさん
2007/12/23(日) 21:14:17ID:???0167nobodyさん
2007/12/24(月) 01:16:59ID:???初心者が勉強するには挙動や仕組みが複雑すぎるし、
勉強すべきウェブアプリの流れが自分で組めない。(組まなくて良い)
0168nobodyさん
2007/12/25(火) 04:06:06ID:???0169nobodyさん
2007/12/25(火) 10:50:49ID:dm3PQI94わかる。でも、書いたあとのコードがわかりやすい。
フレームワークを使う前のコードなんて自分で書いたコードなのにゾっとする。
読めたもんじゃない。。。
0170nobodyさん
2007/12/25(火) 22:35:34ID:???位置から作るといちいち迷ってそれが占める時間が結構ある希ガス
0171nobodyさん
2007/12/26(水) 10:31:28ID:???通常、
AページでAテーブルの内容を表示(Aコントローラー+Aモデル)
BページでBテーブルの内容を表示(Bコントローラー+Bモデル)
というような感じで作ると思うんだけど、
CページでAテーブル+Bテーブルの要約内容を表示したい場合は、どうすれば?
Cコントローラーで、AモデルBモデルを使うというような考え方でいいのかな。
質問の意味が通じなそうスンマセン(´・ω・`)
サイトのトップページで、多テーブルの情報を表示させたいというような場合の話です。
0172nobodyさん
2007/12/26(水) 11:24:07ID:???var $uses => array('Amodel', 'Bmodel');
■ このスレッドは過去ログ倉庫に格納されています