【PHP】フレームワーク CakePHP 10ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/11/01(月) 21:43:26ID:???CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>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
0016nobodyさん
2010/11/02(火) 16:49:23ID:???0018nobodyさん
2010/11/02(火) 18:22:19ID:???0019nobodyさん
2010/11/02(火) 18:37:52ID:???変な煽りとかは早いけど
0020nobodyさん
2010/11/03(水) 06:30:28ID:4NSD+GsH複合主キーが使えないってどんなカルト宗教だよwwwwwwwwww
そんなんだからいつまでたっても子供のオモチャなんだよwwwwwwwwwwwwwww
0021nobodyさん
2010/11/03(水) 17:58:56ID:???大人のオモチャは複数の主キーが使えるのか・・・
0022nobodyさん
2010/11/03(水) 23:14:10ID:???モデルのバリデーションで、アクションによって分岐したい時に
使いたいと思いますが、マニュアルを見る限り、アクションが取得できません。
0023nobodyさん
2010/11/04(木) 00:09:12ID:???ってテスト用のファイルが入ってるから、
bakeでテストしない場合は必要ないですよね?
0024nobodyさん
2010/11/04(木) 03:21:53ID:???モデルに独自メソッド(action渡してvalidateみたいな)を設けるのが素直でいいよ。
実際は取得できるけどhackじみてる。
0026nobodyさん
2010/11/04(木) 14:05:36ID:???Alertモデル内で、
$this->User->findDataFromDatabase();
このように、Userモデル内に作ったファンクションを呼び出すには
どうすればよいでしょうか?
コントローラに書いているように、 public $uses = 'User'; としてみましたが、
エラーが出てしまいました。
002726
2010/11/04(木) 14:54:17ID:???下記のようにやっても上手くいかないのです。。
(1.3です)
<?php
App::import('Model','User');
$User= new User;
class Alert extends AppModel {
public $name ="Alert";
public function saveAlerts($alert) {
$user = $User->findDataFromDatabase('email',$data);
002826
2010/11/04(木) 15:05:14ID:???public function saveAlerts($alert) {
$this->User = ClassRegistry::init('User');
$user = $this->User->findDataFromDatabase('email',$data);
0029nobodyさん
2010/11/04(木) 23:08:41ID:???Configure::write("debug" , 0);
は書いてるけど。
0030nobodyさん
2010/11/05(金) 09:01:55ID:???0031nobodyさん
2010/11/05(金) 13:04:12ID:???0032nobodyさん
2010/11/05(金) 17:06:29ID:???└/diary
└add.ctp
viewをこういう階層にしてURLが↓みたいにしたいと思います。
http://example.com/user/1/diary/add
(意味は、usersテーブルのIDが1の、日記を追加)
こういう表示の仕方って出来るのでしょうか?
0033nobodyさん
2010/11/05(金) 17:32:18ID:???http://api.cakephp.org/class/controller#method-Controllerrender
render()の引数fileをつかうとか、actionかbeforeRender()で。
やったことないけど。
0034nobodyさん
2010/11/05(金) 17:33:08ID:???cakephp routesで検索してみて
003532
2010/11/05(金) 17:45:48ID:???routes.phpに↓と書いてルーティングして
Router::connect(
'/user/:id/diary',
array('controller' => 'user_diary', 'action' => 'index', 'id'),
array('id' => '[0-9]+')
);
コントローラをディレクトリ分けする場合は、bootstrap.phpに
$controllerPaths = array(
ROOT.DS.APP_DIR.DS.'controllers'.DS.'user'.DS,
ROOT.DS.APP_DIR.DS.'controllers'.DS,
);
と書けば動きました。アドバイスありがとうございます。
0036nobodyさん
2010/11/06(土) 18:34:51ID:???MySQL 5.1.50
モデルを普通に更新してsaveしてもmodifiedが更新されない。
ぐぐって、default NULLにするとかをやっても駄目。modifiedをnullにしてsaveしても駄目。
誰か知恵を貸してくれ。
特に変わったことなどはしてません。
0037nobodyさん
2010/11/06(土) 21:31:47ID:???createdはinsert時にちゃんと入る?
modifiedを適当な日時に指定して更新したらどうよ?
あと更新するSQLを$this->Foo->save('id'=>1);とか適当なシンプルなものにしてみてどうなるか
0038nobodyさん
2010/11/07(日) 02:31:33ID:???0039nobodyさん
2010/11/07(日) 11:04:33ID:???※コントローラ
1 function addAlerts
or
2 function add_alerts
1のやり方はPHPの規約通りですが、URLに大文字が混ざってしまうので
悩んでおります。
0040nobodyさん
2010/11/07(日) 11:25:58ID:???それ以外なら1
0041nobodyさん
2010/11/07(日) 12:05:01ID:???バージョンはApache2.2 + cake1.2.8です。
apache_get_modules()で確認した限りではmod_rewriteは動いており、
cakeで軽くアプリを作ったところ画像も表示されています。
ただ、welcomeページは文字だけのシンプルな表示になります。
mod_rewrite設定以外に何か必要な設定があれば教えてもらえないでしょうか。
0042nobodyさん
2010/11/08(月) 10:55:16ID:???CSS,IMGのパスが間違っているんじゃないかとエスパー。
0043nobodyさん
2010/11/08(月) 21:38:00ID:???form->year使って、それっぽいことはできたんだけど、そもそもyearヘルパーって
挙動がちょっと(値が入る配列とかが)特殊なので、普通にセレクトボックスで出力したいんだけど
0044nobodyさん
2010/11/08(月) 21:50:56ID:???$form->select()
にarray(1=>1,2,3,4,5...................)
って渡しとけよ
あとこのへん読んで自分で決めてくれ
http://api.cakephp.org/class/form-helper
0045nobodyさん
2010/11/08(月) 22:20:54ID:???わかりにくいんだよ!
004643
2010/11/08(月) 22:25:37ID:???値が入る配列とかが特殊って書いてるんだけど…
具体的に言うとUser.ageって名前でセレクトボックス作ると、data['User']['age']['year']に値が入る
他にもIDの付き方とか、最後にYearがついたりして、微妙に使いづらい
(monthとかdayとセットで使う前提で作られてる感じ)
そういう力業の解決方法はあるんだろうけど、標準で用意されてないのかな、と。
0047nobodyさん
2010/11/08(月) 22:31:10ID:???0050nobodyさん
2010/11/09(火) 00:38:40ID:???0051nobodyさん
2010/11/09(火) 00:49:02ID:???$options = array_combine($options, $options);
ってよくやる
0052nobodyさん
2010/11/09(火) 01:42:44ID:???0053nobodyさん
2010/11/09(火) 12:25:52ID:???どうすればよいでしょうか? 1.3です。
マニュアルを読むと、httpステータスコードしか指定できないから、
無理なのかな。。
$this->redirect(array('action' => 'edit', $id));
(この$idに変数をいれたらエラーが。)
http://book.cakephp.org/view/982/redirect
005453
2010/11/09(火) 12:35:03ID:???http://cakephp.1045679.n5.nabble.com/Does-redirect-clear-variables-td1274496.html
0057nobodyさん
2010/11/09(火) 13:55:59ID:???ログインしたままの状態で数時間そのままにし、別のページを閲覧すると
ログインが切れてログインフォームに移動します。
改めてログインしようとログイン情報を入れても失敗します。
しかし、同じ内容をもう一度入力するとログインできます。
おそらくセッションの問題とは思うのですが、
この現象を解決する方法はないでしょうか?
0058nobodyさん
2010/11/09(火) 16:30:27ID:???Auth使ってるあたりのコードを書いてみて
login() , logout() とか beforeFilter() とか
0059nobodyさん
2010/11/09(火) 20:47:00ID:???Cookbookの内容と同じです。
http://book.cakephp.org/ja/view/1250/Authentication
他の人は>>57の症状にならないんですか?
割と頻繁に発生するんですが。
0060nobodyさん
2010/11/09(火) 21:18:33ID:???function get() {
$this->User = ClassRegistry::init('User'); //use User model
$data = $this->User->find($conditions);
}
このように、ファンクションのたびに、 ClassRegistry::init('User') で
他のモデルを呼び出しています。
しかし、一つのモデル内で一括して適用させるには
どうすればよいのでしょうか?
もしくは、一括で適用させると重くなるので、今まで通り毎回使う時だけ
呼び出したほうが件名なのでしょうか?
0061nobodyさん
2010/11/09(火) 21:28:34ID:???>しかし、一つのモデル内で一括して適用させるには
>どうすればよいのでしょうか?
なにいってっかわかんね。
あそしえーしょんされてるなら
$this->Userでもともと呼べるけど、そうじゃないんだよね?
だったらなんか根本的に設計がダメダメだと思うわ
そのモデルでやるべきことじゃない
006260
2010/11/09(火) 21:50:35ID:???質問がややこしくすいません。
サンプルがわかりくいですが、データベースの操作は
まったく関係なしという形の場合ではどうでしょうか?
つまり、
Aのモデル内に function setAlerts() というファンクションがあり、
このファンクションをBのモデル内の操作で利用したいといった形です。
その時、Bのモデル内で
$this->A = ClassRegistry::init('A');
$this->A->setAlerts();
このようにしてます。 でも、毎回 $this->A = ClassRegistry::init('A'); を呼び出すのはめんどくさいなあ、
でも、全体に適用すると重くなるのかなあと悩んでます。
0063nobodyさん
2010/11/09(火) 22:34:45ID:???0064nobodyさん
2010/11/10(水) 14:28:56ID:???FormHelperは積極的に使ってるんですが。
0065nobodyさん
2010/11/10(水) 14:42:58ID:???0066nobodyさん
2010/11/10(水) 15:21:21ID:???linkは重くなるってのはググったら良く出てくるな。
ま、プログラムをかますという事はそれなりの処理を入れているわけで
必然的に、素のHTMLよりも重くなるのは当たり前。
0067nobodyさん
2010/11/10(水) 15:57:05ID:???0072nobodyさん
2010/11/11(木) 03:35:51ID:???usesが長くてウゼー
0073nobodyさん
2010/11/11(木) 11:37:02ID:???適切にアソシエーション貼ればそんなにならなくない?
あとuses使うより、ClassRegistry::init()使った方が良いよ
0074nobodyさん
2010/11/11(木) 11:41:50ID:???0075nobodyさん
2010/11/11(木) 11:57:51ID:???多くなりがちだね
0076nobodyさん
2010/11/11(木) 12:18:59ID:???そこで名前登録したり、試合したり、初期アイテムやお金を与えたり全部入ってるから
モデルをたくさん使うんだが、モデル同士は普段から関連付けるほどでもなかったりする
ユーザーのマイページでも、各種パラメータを表示するため使用モデルがアホみたいに増える
パラメータが多いので、モデルはできるだけ分けないと100カラムぐらいのテーブルができてしまう
>>73
usesだとコントローラが問答無用に全部初期化するけど、各アクション内で使うものだけ自分でinitしろってこと?
0077nobodyさん
2010/11/11(木) 13:00:43ID:???そう、usesよりCR::initのほうが推奨されてるから書いたけど
その使い方でController内に少数のアクションしかないならどっちでも良いかも
0079nobodyさん
2010/11/11(木) 20:33:51ID:???0080nobodyさん
2010/11/11(木) 22:30:25ID:???同一のプログラムで全く弄っておらず、設定も変えておらず、
それなのにMissing Controllerというエラーが出る時と出ない時があるのですが、
これは何故ですか?
バージョンはcakePHP1.35で
プログラムは「cakePHP1.3によるアプリケーション開発」のP49~
フォームの利用というところのコードです。
0081nobodyさん
2010/11/11(木) 22:51:56ID:???http://example.com/user/1/add
というURLでアクセスできるようにしています。
ビューの$paginator->sortでリンクされるURLを
変更する方法って無いですよね?
$paginator->options(array('url'=>"id:1"));
をビューに追加して、リンクパラメーターに付加させる事は出来ますが
URLがhttp://example.com/user/add/id:1/page:1/sort:id/direction:asc
のようになってしまいます。
0082nobodyさん
2010/11/11(木) 23:23:27ID:???でよくなかったっけ?タメシテない
0083nobodyさん
2010/11/11(木) 23:37:16ID:???$this->Auth->allow('index','logout');
//このように一括で設定
$this->account = $this->Auth->user();
$this->set('account', $this->account ); //send account data to view
}
ログイン後のページで、ユーザーのステイタスを画面に
表示させています。
AuthからIDを取って、setでビューに送る
コードをアクション毎に書くより、上記のようにbeforeFilterで
一括してもよいでしょうか?
これは重くなる原因だからやってはいけない方法か不安なので
アドバイスいただければ幸いです。
0085nobodyさん
2010/11/12(金) 00:01:51ID:???慣れてきたらソース読んだほうがいいよ
http://api.cakephp.org/classes
ここからクラス探して読めばいい
0086nobodyさん
2010/11/12(金) 00:03:36ID:???毎回DBに取りに行くわけじゃなく、Session読みに行くだけだから
それほど重くない処理だと思う。
あとはDebugKitなり入れて、負荷確かめながらやってみて
008780
2010/11/12(金) 03:20:40ID:???http://hogehoge/hage
で操作するとMissingContorollerのエラーが出て
http://hogehoge/hage/
だとエラーが出ないです
何故こうなるか意味が分からないんですが、一応、報告まで^^;
0088nobodyさん
2010/11/12(金) 03:52:21ID:???apacheの設定でそういうのあったっけ?どのhttpdかしらんが
0089nobodyさん
2010/11/12(金) 04:01:22ID:???自作CMS作っていた時に同じような症状に出くわした。
0090nobodyさん
2010/11/12(金) 13:49:56ID:???loadModelってのもあるみたいだけどどっちがいいの?
loadModelはコントローラでしか使えないんだっけ?
0092nobodyさん
2010/11/12(金) 14:30:37ID:???0093nobodyさん
2010/11/12(金) 14:40:37ID:???0094nobodyさん
2010/11/12(金) 15:02:03ID:???ClassRegistryって比較的新しいのよ
で、それができていろいろ不要になった感じ
loadModelもそう。というかloadModelが、かな
0095nobodyさん
2010/11/12(金) 20:40:46ID:???App::import('model', 'User');
$User = new User;
よりいいかんじ?
0097nobodyさん
2010/11/12(金) 22:52:31ID:???URL上はhttp://example.com/comment/で表示させたいと思っています。
prefixとは逆の処理のイメージなのですが、その様な事は可能なのでしょうか?
可能な場合、ルーティングの書き方を教えてください。
0099nobodyさん
2010/11/13(土) 13:08:07ID:???調べてみたのですが、コントローラーに文字列を付与して
指定とは別のコントローラーを実行するような設定箇所がありません。
だから↓な感じの指定方法しか思いつかないです・・。
$array = explode('/', $_GET['url']);
$contoroller = 'user_'.$array[0];
Router::connect('/:controller/*',array('controller' => $controller));
0100nobodyさん
2010/11/13(土) 13:32:07ID:???http://book.cakephp.org/ja/view/542/Defining-Routes
これ読んで理解できないって言うなら、諦めた方がいいと思う。
0101nobodyさん
2010/11/13(土) 14:14:22ID:???0103nobodyさん
2010/11/13(土) 14:29:27ID:???いい方法はあるでしょうか?
本来、コントローラで書くものだとは思うのですが、
モデルに書けるとすごくシンプルになるもので、
0108nobodyさん
2010/11/13(土) 18:26:12ID:???まぁこれは人それぞれなところだな。
0109nobodyさん
2010/11/13(土) 19:16:12ID:???0110nobodyさん
2010/11/13(土) 21:06:50ID:???使ってる場合、CSSやJSファイルがページ毎に違うって事が
多々あると思うんですけど、どうしてます?
ifで分岐して読み込むファイル決めるとか。
0112nobodyさん
2010/11/13(土) 21:27:29ID:???0115nobodyさん
2010/11/13(土) 22:48:16ID:???http://bakery.cakephp.org/articles/milesj/2009/07/05/autologin-component-an-auth-remember-me-feature
これ使ってたけど、1.3でちゃんと動いている人いますか?
$this->Cookie->del(), which did not work for me (CakePHP 1.3.2). I changed it to $this->Cookie->destroy(), what worked out.
と書いてるけど、どうもログアウトがうまくいかない。。
0116nobodyさん
2010/11/14(日) 13:19:26ID:???外してたらすまんが、CookieComponent::del()が廃止されて使うべきなのはCookieComponent::delete()だよ。destory()は全部消えちゃうんじゃなかったかな?
■ このスレッドは過去ログ倉庫に格納されています