【PHP】フレームワーク CakePHP 8ホール目【1.3】
1 :
nobodyさん :
2010/03/18(木) 10:00:59 ID:6+kHM8kH
テンプレらしきものは以上 補足があればどうぞ Have a Nice Cooking ! > cake bake all User
>>1 乙
そろそろ1.3への移行を考えなきゃいけない時期かね
1.1→1.2よりかは1.2→1.3の方がやるべきことは少なそうだけど、1.3の新機能のメリットはそこまで大きく感じない・・・
>>8 試しに移行を進めてるけど、俺のソースだと結構直すとこいっぱいあったな。
例えばhtmlヘルパーのオプション設定とか、
ちぐはぐだなと思ってた部分はだいぶ合理化されてるから気分的にはすっきりしたけど。
core.php を 0 にして
cakephp の debug を
$_SESSION['Auth']['User']['email'] = '
[email protected] ';
でログインしているときのみ、 2にしたいんだけど、どうすればいいかな。
beforeFilter や beforeRenderでやってもだめみたい。
core.php を 0 にしちゃうと、コントローラーで個別に Configure::write('debug', 2); をやっても
エラーがちゃんと表示されないんだよね。
>>10 エラーって何だろ?
ふつうにbeforeFilterやbeforeRenderで変えられるよdebugは
>>10 の例ならbootstrap.phpで変えても良いけど
>>11 ありがとう。core.php内でIPアドレスでチェックすることにして解決しました。
13 :
nobodyさん :2010/03/19(金) 19:16:46 ID:qSSo5h5k
すごい長いですが失礼します。 まず、やりたいことなのですが。 DBconsultantsのmetroフィールドに01,03,11,22,33,34が入っていたとして この中のどれかを含んでいたらconsultants全てのデータを取ってきたいのです view 1~47の都道府県がチェックボックスになっています。 <?php e($form->checkbox('Page.metro.'.$prefectureHashModel['Prefecture']['pre_id']))?>
14 :
nobodyさん :2010/03/19(金) 19:18:17 ID:qSSo5h5k
controller // チェックが入った物だけを取得し、配列に格納 $metroHash = array(); foreach($this->data['Page']['metro'] as $key => $value){ if($value == 1){ $metroHash[] = 'metro Like ' . "%".$key."% "; } } // 配列を文字列に変換 $metroHash = implode(' or ',$metroHash); $consultantHashModelArray = $this->Consultant->query('SELECT * FROM `consultants` WHERE ' .$metroHash); ここでこのSQL文を使えばできるのですが、今回やりたいのは下のpaginatorででして どのようにすれば上のSQL文と同じ処理をしてくれるかがわかりませんので教えて頂けないでしょうか? $conditionsHash = array(); $conditionsHash['metoro LIKE ?'] = なんたら? $this->paginate = array('Consultant' => array('conditions' => $conditionsHash, 'limit' => 10, 'order' => array('consultant_id' => 'DESC'), 'page' => 1));
すみませんCakeのバージョンは1.3です。
>>13 モデル名からなにやりたいのか想像つきにくいよ。
たぶんconsultants_metorosテーブルを作ってHABTMにするのが簡単なんじゃないかなと思うけど。
cakephp1.2.6+xamppで、
http://3d.rokujyou.com/cake/index.htmlを動かそうとしているのですが 、
Missing Controller
Error: UrllistController could not be found.
Error: Create the class UrllistController below in file: app\controllers\urllist_controller.php
というエラーが出てしまいます。
urllists_controller.phpをurllist_controller.phpに変更しても同じでした。
何か他に設定すべきことがあるのでしょうか?
初歩的な質問で申し訳ございません チュートリアルで分からない部分があります。 コントローラとビューについて ビューの画面に遷移しようとするとコントローラのメソッドが呼び出され その結果、戻り値を反映したビューがブラウザに表示されると解釈していました。 しかし、editファンクション内の処理で行われるPostデータをsaveする命令は ビューが表示された後にPost送信するときに実行されるように見えます。 この処理の流れがよく分かりません。 恐縮ですが、どなたか分かる方がいればご教授お願いします。
>>21 まず基本から。
ひとつのリクエストは、Controllerが(必要に応じてmodelとやりとりしながら)処理し、最終的にviewを表示して終了する
で、addやeditアクションについては、[1]フォームを表示する[2]postデータを保存する、のふたつのリクエストを同じアクションで行っているにすぎない
postされたデータがあるリクエストであれば[2]を、なければ[1]を行っている
それぞれ別のリクエスト
>>22 レスありがとうございます。
empty($this->data) ならば、フォームが表示される処理のみされる
(editの場合はreadされた値が代入され表示される)
ということですね。
丁寧に説明していただき、とても助かりました。
公式以外で入門サイトありませんか?
>25 素直に本買った方が早いと思う
>>27 本買うことにします
>>26 googleで検索してもたいして有益なサイトはありませんね、国内サイトしか見てませんけど
えっ!?
初心者向けの開発会の需要はあるかねえ? 前に誰かがやってた気がするんだけど
25=28=30 やっぱりcakephpは難しいのでCodeIgniterに移住します 公式のユーザーガイドが分かりやすくてフレームワーク初心者のぼくでもなんなくわかりやすいので ありがとうございました
>>31 cakeもそんなに難しくはないので、また気が向いたら戻ってきてね
>>30 プログラマの将来のためにも
初心者向けの入り口は作ってあげたほうが良いよ。
まぁ、ほとんど挫折するだろうけど
入門はそんなに難しくないと思うけどな カンタンでわりと実践的なチュートリアルを増やしたらいいかも
初心者向きのサイトはけっこうあると思うけどなぁ。 むしろ本だとbake中心だったりして実用的じゃない
常識的に考えてDBっていくつまで hasOne,hasMany,belongsTo していいものなの? あんまりやりすぎても負荷がかかるんだろうけど。 4,5個つなげる程度なら問題ないのかな。
みんな開発環境って何使ってるの?
秀丸
>>36 実行速度と実行回数によりけりかな
>>37 VirtualBox + CentOS + vim
colinux+うぶんちゅ+秀丸
待ってろcakephp 俺は貴様を倒しに必ず戻ってくる
>>34 symfonyのQ&Aサイトのチュートリアルがあったと思うんだけど、あの程度のボリュームのやつがcakeであると良いと思う
暇と技術があれば俺が作りたいけど、どっちもあまりない
>>36 例えば普通のブログみたいなもんでも
記事にコメント、ユーザー、タグ、カテゴリー、トラックバック・・・って
いっぱいくっついてくるわけだしいいんじゃないの?
まあフィールドを選んだりcontainで必要なものだけ絞ったりはするけど。
SQLレベルに限って言えば、JOINの数なんてそんなに問題にならないと思うけどな 業務系システムだと3桁とか珍しくないし
3桁は珍しいんじゃないか?w まぁなんにしても適切な結合で適切にインデックスとか 貼ってあれば問題なかろう
CakePHPの開発にトライしてみました。PHP自体、かなり初心者。 相当昔、仕事でJavaのStrutsというMVCフレームワークで ガシガシ開発していたので、何とかなるだろうと思ったら、 意外につまづきました。主にひっかかったのは以下3点。 1点目:MVCのContollerでの設定方法が良く分からない 2点目:Modelの命名とテーブルの命名の関係性にはまる 3点目:ヘッダーのフッターの余分な表示どうにかなんない? 全て解決しましたが、
46です。間違ってカキコしてしまいました。
慣れれば快適なフレームワークですが、
ちょっと入り口は敷居が高い気がしました。
>>34 さんの「カンタンでわりと実践的なチュートリアルを増やしたらいいかも」
に同意です。
48 :
nobodyさん :2010/03/23(火) 07:11:46 ID:3JpwvDQY
sessionが使えない環境でsessionぽい使い道として、 Configure::read & writeを利用しようと思うのですが、 セキュリティ上まずい点はありますか?
49 :
nobodyさん :2010/03/23(火) 07:48:44 ID:fJcglhKE
よくわからんが、それってリクエスト毎のパラメータを引き継げるの?
50 :
48 :2010/03/23(火) 08:29:31 ID:???
GETでデータが来たら、 Configure::write('aaa', $_GET['nantoka']); みたいにすれば、いつでもConfigure::read('aaa')で 内容を取り出せます。 Cookieを切っても保存されているのだけど ちょっとどういう風に動いてる機能なのか、よくわからなくて。
てかそれ あきらかにセッションごとじゃなくて 全員でひとつの設定になるよね
>>39 >>43 >>44 >>55 ありがとう!
以前レンタルサーバーで mysql too many connections ってエラーが出たのでSQL恐怖症で。
このエラーって一般的なレンタルサーバーだとめったに出ないものなのかな。
cakephp使ってないときだったので、sqlの組み方がおかしかったのかもしれなけど。
55 :
nobodyさん :2010/03/23(火) 10:31:46 ID:CwgG/vKY
ちょっと悩んでいます。 以下のように[ ] で配列を作りたい場合、cakeではどのように入力したらよいのでしょうか? <input type="text" name="name[]" /> echo $form->input('name[]'); このようにやっても上手くいかず。。
>>56 たしか第2引数で
name => 'hoge[]'
みたいに指定すると、Securityコンポーネントで弾かれるはず・・・
解決策はしらん。
>>54 同居人が多いレンタルサーバーだとどこでも接続数が絞られてるからエラー出るよ
チューニングするとか、キャッシュするとかしかない
>>58 ありがとうございます。
mysqlとサーバーはほとんど知識無いんですけど、専用サーバーなら出ませんかね?
次エラーがさくらマネージドにしようか考え中です。
60 :
48 :2010/03/23(火) 22:07:17 ID:???
>>52 なるほど
>>51 とりあえず、テストしたら全体でひとつの設定にはならないようです
なので、この方法を使ってみます。
61 :
55 :2010/03/24(水) 08:07:39 ID:???
ageちゃって申し訳ありません。
>>56 >>57 echo $form->input('Modelname.0.fieldname');
とすると解決しました!
ありがとうございます!
誰か初心者講座サイト作ってください
cakephp1.3を使用しています Paginatorでチェックボックス引継ぎって可能ですか? 10件ずつ表示したとして、次の10件に行っても以前の10件でチェック していたチェックボックスは維持させていたいのですが。 可能でしたらやり方教えてくれませんか
>>59 専用サーバーだって、mysqlの設定とアクセスの数によっては出る
その辺はcakephpじゃなくてmysqlの話になるのでmysqlスレいって聞いた方がいいよ
>>64 それは、Cakeに限らず普通にセッションで持たせれば良いんじゃないのかな?
cakephpで作成日時はcreatedですが、作成した人のIPや更新した人のhost、 などどう定義してますでしょうか? 作成した人のIP:created_ip 作成した人のHOST:created_host 更新した人のIP:updated_ip 更新した人のIP:updated_host 最後のdがdateのdであれば、以下のように定義? 作成した人のIP:create_ip 作成した人のHOST:create_host 更新した人のIP:update_ip 更新した人のIP:update_host 守ったほうがよい細かいDBの命令規則のページなどありましたら教えてほしいです。
>>68 >最後のdがdateのdであれば、以下のように定義?
-edは過去分詞形なんだが…。
それはさておき、作成した人、更新した人だったら
creator_ip、creator_host、updater_ip、updater_host
でいいんじゃないかと思う。
個人的にupdaterよりeditorのほうがしっくりくるんだけども。
>>68 マニュアルのモデルのところに出てる以外は別に決まってないので好きなようにどうぞ。
>>69 のように英語で考えてわかりやすいように・・・というか、
自分でコントローラーとかビューのコード書くときに「えっとフィールド名なんだっけ??」って
いちいち探さなくて済むように作っておけばいいよ。
>>71 read()じゃなくてfind()を使いましょう
マニュアル読んで、editアクションで何が行なわれているかを理解するところから始めると良いよ
73 :
71 :2010/03/25(木) 09:32:04 ID:???
>>72 ありがとうございます!
スクリプトを以下のように書くとこうなりました。
http://www.imagecheese.com/gallery/ouo.jpg function edit($id = null) {
if (!empty($this->data)) {
if($this->User->saveall($this->data, array('validate'=>'first'))){
$this->Session->setFlash(__('The Data has been saved.', true));
}
}
if (empty($this->data)) {
$conditions = array("hash" => $id);
$this->data = $this->User->findAll($conditions);
$this->set('data', $this->data);
}
}
データは取得できたけど、フォームに自動的に挿入されない。。
74 :
71 :2010/03/25(木) 09:34:29 ID:???
ちなみに Viewの部分はこちらです。 <?php echo $form->create('User',array("action"=>"show"));?> <fieldset> <legend><?php __('Edit Data');?></legend> <?php echo $form->input('address'); echo $form->input('Keyword.0.name'); echo $form->input('Keyword.1.name'); echo $form->input('Keyword.2.name'); ?> </fieldset> <?php echo $form->end('Submit');?>
75 :
71 :2010/03/25(木) 09:40:46 ID:???
すいません! findall じゃなくて findで指定したら上手くいきました! なんて馬鹿なんだ。。
76 :
72 :2010/03/25(木) 09:43:57 ID:???
>>73-75 全部聞こうとしないで、試行錯誤してごらん
いつまでも使いこなせないよ
77 :
71 :2010/03/25(木) 09:52:43 ID:???
了解しました。 すぐに聞かずに自分で悩む時間を大切にします! この試行錯誤する過程が一番身になるんですよね。。
78 :
64 :2010/03/25(木) 17:45:28 ID:???
cookieにsessionですか すみませんがPaginetorでの具体的なやり方教えていただけませんか?
ヒントだけあげるとpaginator使おうが使わなかろうがフォームに値をセットするには どうすればいいか考えればいい。
甘やかしすぎるのはよくないんじゃねーの。 ただ「教えてくれ」と言ってる奴ってダメだよ。 「ここまで調べたけど、ここが分からない」というのが本来の聞き方でしょ。 ダメ人間に餌を与えすぎると無意味に肥え太るぞ。
>>78 とりあえず、それぞれの値を保存、取得するのに
いくつかのやり方があるということ
どういうサイトを作っているのか、晒してくれれば
見にいくよ
83 :
64 :2010/03/26(金) 09:23:56 ID:???
POSTで渡すならすぐにわかるのですが ちなみにチェックボックスは <?php e($form->checkbox('Model.name.'.$id))?> という形でこれをforeachで繰り返し出してます。 POSTで来るなら foreach($this->data['Model']['name'] as $key => $value){ if($value == 1){ } 見たいな感じの処理でいいと思うのですが もう少しpaginatorを勉強します すみませんでした
>>83 paginatorというブラックボックスを前にして、たぶん本質とは全然関係なさそうなところで
引っかかってるだろうから俺は
>>80 を書いたんだけども、
paginatorは一旦頭から切り離す。どのページに推移しようがやることは同じだって。
86 :
64 :2010/03/26(金) 13:12:20 ID:???
すみませんやりたいことを初めから準に書きますね。 まず、検索フォーム(page_contololler)から『アイス』と入力して検索 データベースから『アイス』を含むユーザーを取ってきます。 ここは // 検索条件 if (env('REQUEST_METHOD') == 'POST' ) { $this->Session->write('pageHash', $this->data['Page']); $conditionsHash = $this->getWhereParameters($this->data['Page']); } elseif (isset($this->passedArgs['Page'])) { $this->data['Page'] = $this->Session->read('pageHash'); $conditionsHash = $this->getWhereParameters($this->data['Page']); } else { $this->Session->delete('pageHash'); $conditionsHash = array(); } //検索条件 function getWhereParameters($pageHash) { $conditionsHash = array(); $conditionsHash['name' Like ?] = $pageHash['page']['name']; } $this->paginate = array('Model' => array('conditions' => $conditionsHash, 'limit' => 10 'page' => 1)); こういった感じで$conditionsHashをsessionで渡して paginatorの次へを押した場合検索条件を引き継ぐようにしています。
87 :
64 :2010/03/26(金) 13:16:17 ID:???
ここでリスト一覧にさっきのチェックボック(チェックのON,OFF可能)を持ったユーザが一人一人 出てくるわけなのですが。 paginatorの 次へ>> や << 前へを押した場合に 自分でチェックをつけたチェックボックスを維持したままページを移動したいのです。 それで最後にチェックの入ったユーザだけを取り出すというシステムです。 やはり表示上は裏で全部出してjavascriptでの制御が簡単なんですかね
>>87 次へ>>をsubmitにすれば、controllerでsessionに保存したりできるよね
しかし、どちらにせよjavascriptは使うのではあるまいか、と思います
面倒だから検索条件をserializeしてセッションでわたせば。
ページングしてるページ毎のチェックボックスの状態を記憶せにゃらならんのでしょ。 自分だったら 1)チェックボックスにonclickイベントつけて、ユーザーIDとチェック状態を非同期送信 2)1)をサーバー側のアクションで受けて、DBなりセッションなりに溜めとく 3)あとは溜めたステータス情報を持ち回って、煮るなり焼くなりお好みひゃっほー あ、昼休みおわた
SQLのログでさ、 SQLへの負荷 はどれをみればいいのかな。 Nr Query Error Affected Num. rows Took (ms) おしえてちょんまげ。
>>91 そのなかなら Took (ms)
ms = micro seconds
>>92 ご親切にありがとう!
ちなみにどれくらいまでが問題無い範囲なんだろ。
合計が 100越えたら重すぎるとか、300までなら余裕とか。
もちろんアクセス数などにもよるだろうけど。
94 :
64 :2010/03/26(金) 15:48:19 ID:???
一画面に全部のデータを読み込むのかな ありっちゃありだけど
yahooや楽天のように、ログインしているとユーザ専用のリンクが見えて、非ログイン時には その旨をメッセージで表示するにはどうすればよいのでしょう。 (viewで表示分岐するのは分かるんですが、その前のAuthでどうするか) 非ログインユーザはゲストとして自動的に認証させる?という方法しか 思いつかないのですが、スマートな方法はありませんか。
?? 現状でログインしているかどうかの判断で振り分ければいいのでは?
>>94 全データが多くなければそれでもいいと思う
1.3は触ってないからわからないけど
1.2なら、paginatorヘルパーで出力するときに引数でFORMのパラメータ渡せば
検索条件付のURLによるページングも作れる
>>96 Auth使ってるなら
$this->Auth->user()
で中身確認できたと思うけど
issetとかで判断すればいいんじゃない?
controllerね
最近マニュアル読まないで質問する人増えたなあ 基本的なことは一通り書いてあるけどねえ
自由に質問させてあげればいいんじゃないかな 答えるのは俺らの自由なんだし
別に気にならない
そもそもrails自体最初はPHPで実装しようと思って失敗してRubyに切り替えられたものなので、 railsユーザーから見たら(Cake)PHPがNGなのは当然と言えば当然のような
欠陥品じゃない言語・FWなんて歴史上存在したことがない
んだね。何使ってたって上手くいかないときには「〇〇はクソ!」とかって吠えたくなるときあるもんね。
それ、むしろカチンときてるっぽぃ
CakePHPの開発者が離脱したらしいけど CakePHPに影響あるかね?
これはstableでるのも近いかも
cakephpは delete や save などの機能を使う時にデータテーブルのidを参照するようにみえます。 ということは、下記のようにidなしのkeywordsテーブルを作成するのはNGなのでしょうか? usersテーブル id, address, keywords テーブル name, user_id (二つ合わせてプライマリーキー)
>>111 複合プライマリーキーはNG
idを別途用意しておくべし
>>112 やはり。。いろいろやっても上手く動かなくて悩んでました。
ありがとうございます!
実はkeywordsテーブルで name と user_id が重複しないようにしたかったのです。
ローソン(name), 13(user_id)
ローソン(name), 13(user_id)
このように、データが重複しないように。
調べたところ、Cakephpにはそういったデータ用の関数はなさそうです。
直に MySQLの replace を書き込むのが吉でしょうか?
>>113 1.3ならvirtualFieldのisUniqueでいけそうな気がするが
1.2なら独自バリデートかな
>>114 1.2です。
やっぱり独自バリデートのコードを使用するのがベストっぽいですね。
ありがとうございます。
DB側にユニーク制約つければいいんじゃないの?
cakeでエラー出るやん
何が上手くいかないのか書けや
>>119 users/action がcronでちゃんと実行されないのです。。
>>120 「ちゃんと実行されない」????
神様やスーパーマンじゃないんだから、「ちゃんと実行されない」と書かれてもお前が
何に困っているか?原因は何か?わかるわけないだろ!!!
表示されているエラーメッセージさらせ!
さくらレンタルサーバにも色々あるけど、どれ使ってる???
http://www.sakura.ne.jp/index.php サーバに負荷掛けない為のcron使用時の制約はどうなってんの???
詳しい情報をさらせ!!!
cronがまったく動かないの?
他の物はcron正常に動くの??
ちょっと、怖いよw
ちゃんと叱ってくれる
>>121 はとてもマシだと思うぞ
そう思うが、徹夜明けのイライラをぶつけられてもw
シカトされるよりは、いいな 優先事項は、問題を解決することだ
>>118 みんなの優しさに感動したからマジレスする
そのやり方なら、URL叩くと、アクションが実行されるよね?
動くなら、さくらのcronの設定という問題じゃない?
ほかのcronのスクリプトが動くかどうかを試したかな?
分からなければCakePHP関係無しに調べると良いよ
まずは、 cd /home/domainname/www/scrap/app/webroot ; /usr/local/bin/php cron.php これが動くのか、確認しようぜ 動くならcakeの問題じゃなく、cronの設定不備だと思う
まずcronの実行ログ確認しなよ
129 :
118 :2010/04/01(木) 11:00:53 ID:???
131 :
118 :2010/04/01(木) 12:05:53 ID:???
>>130 レスありがとうございます。なんとか、上手く動きました! dirnameの階層が間違っていたようです。
さらに、cronのエラーメールも、さくらの初期パスワード設定を入力していなかったので届かなかったようです。
最終的な設定は以下です。
www/scrap/vendors/cron/scrape.php
<?php
$_GET['url'] = "/users/action";
require_once dirname(dirname(dirname(__FILE__))) . '/index.php';
?>
【さくらのcron設定】
cd /home/domainname/www/scrap/vendors/cron ; /usr/local/bin/php scrape.php
みなさん、暖かいアドバイスどうもありがとうございました。。
年度はじめの今日がサイトオープンラッシュだったところが多かったんじゃないでしょうか。 開発者の皆さん、ひとまずお疲れ様です。 皆様は今夜旨い酒が飲めていますように。。。 未だ修羅場の職場より逃避カキコ sage
FWが開発効率が数倍良くなるから、ウェブ開発で徹夜したりデスマーチになったりと言うことはなくなる!はずだった…
デスマの原因は開発効率じゃないからな
自分みたいなデザイナーでもFWのおかげでいろいろいじれるのはありがたい うけられる仕事の幅も広がった。 でも仕事がどんどん難しくなっていく…勉強ばっかりだ
オープン・リフレッシュは3月最終週にした ・・・はずだった
>>133 日本人の質を低下させたのは実はゆとり教育などではなく馬鹿でもチョンでも学士様に仕立て上げる悪平等教育なんだよ
今やむしろチョン様大歓迎だろ
昔の日本はドイツ式で大学へ行くのは本当に優秀な人間だけで普通の子は小学校へも行かず奉公へ出たもんだ
戦前世代だとそういう中から優秀な経営者や作家が生まれているだろ
脱ゆとりも結構だけどこの悪平等の是正なくして日本は再生しないよ
>>137 小さい時から、目標がある人間は、それで良いが、
やりたい事に気がついて、勉強できる環境が、ないのも微妙だろ。。。
実際、ほんとにやる気がある人間は、30でも40でも勉強出来る環境に行くけど、
全員そんなに意思は固くない。
デザイナーというか、HTMLコーダーさんと連携するときどうしてる? 一旦HTMLコーディングしたものを、こっちでVIEWのテンプレートに書き換え?
>>139 それが普通でしょ
デザイナーにphpを強要するの?
1.2.6ですが、ブログチュートリアルを参考に簡単な マスタテーブルの表示・追加・削除画面を作っているんですが Modelのsaveが実行されません。(INSERTされない) function add(){ if (!empty($this->data)) { if ($this->JimushoMaster->save($this->data)) { $this->flash('Your post has been saved.','/jimusho_masters'); } } } こんな感じで行ってるんですがナニが悪いんでしょう? モデルJimushoMasterはid(int, unsigned, auto_increment)とname(varchar)しか ない簡単なものです。 add.ctpでは <h1>事務所追加</h1> <?php echo $form->create('jimusho_master'); echo $form->input('name'); echo $form->end('保存'); ?> とだけしています。
>>141 これだけじゃ詳しくは分からんけど、validateに失敗しているんじゃない?
debug($this->JimushoMaster->invalidFields());
をsave失敗時に実行してみたら何か入ってるんじゃないかな
saveされないというのはSQLが実行されずにaddのフォームが表示されるんだよね?
あとついでだけど、今のうちに規約に沿う癖をつけといた方が良いよ Office / offices / OfficesController
144 :
nobodyさん :2010/04/05(月) 22:59:55 ID:1CfLL9NS
入力値のバリデーションを行なう前に 半角に変換したいのですが、 そういう処理はどう書けばいいでしょうか?
バリデーションに投げる前の段階でPHPで書けばいいと思うよ
beforeValidateでいいんじゃないの? とにかくマニュアルは一通り目を通しておこうよ。 覚えなくてもいいけど、どこでどんな処理ができる・・・ってだいたい見当つくでしょ。
コントローラの中でモデルに渡す前にフィルタかけるしかないですね・・
146から147の流れになることがよくわからん
beforeValidateはモデル内のことなので 中でdataを加工してもviewまで引っ張れないのですよ
>>149 何でviewに変換後のデータが必要かは知らないけど、それが書いてなきゃ分からんでしょ
やろうと思えばModel内で加工することもできるし
>>142 さん
ご助言ありがとうございます。
saveの返値は1でしたので成功しているようです。
が、やはりデータベースにINSERTされていないようです。
念のため、save後、debug($this->JimushoMaster->invalidFields());
してみましたが空っぽなのでバリデートの失敗ではないようです。
レールから脱線しますが、
$this->JimushoMaster->query('INSERT INTO jimusho_masters (name) VALUES (\''.$this->data['jimusho_master']['name'].'\');');
のように無理やりSQLを指定して実行すると問題なくINSERTされました。
うーん、ナニが悪いんでしょう。ケーキ食べ始めなのでわからんす。
>>151 期待通りの動きをしないときはとにかくdebug()をあちこちにぶっ差して
どういうデータが来てるか見る。あとdebugモード2の時のSQLダンプをよく読むのがいいです。
debug()はよく使うのだけど、boolean型もしっかりとどの値か表示してほしいな
>>151 ん?ということは、リダイレクトしているということ?
だったら、発行されたSQLとか見て原因探ればいいんじゃない?debugは2にしてるよね?
Insertされないというのをもうちょっと具体的に書いてみてちょ
155 :
151 :2010/04/07(水) 16:13:32 ID:???
すいません、Cake焼き始めなものでよくわかってなく 説明も下手ですね。 if( $this->JimushoMaster->save($this->data) ){ $this->redirect('/jimusho_masters'); }else{ debug($this->JimushoMaster->invalidFields()); } 現在のコードはこんな感じです。 実行すると、レコードが追加されずに/jimusho_mastersにリダイレクトします。 saveは成功したという結果が返っているんですが、 レコードは増えていない画面に戻ります。 Validateが失敗していれば、エラーがでるはずですが なにも表示されないのでエラーではないようです。 デバッグモードで画面下にクエリが出るんですが そこにはINSERT文がないので、saveを呼び出しても INSERTクエリが実行されてないようです。
>>155 読み返してみた。
第一引数はモデル名じゃなかったかな?
echo $form->create();
or
echo $form->create('JimushoMaster');
にしてみてどう?
157 :
151 :2010/04/07(水) 17:41:43 ID:???
>>156 さん
なおりました!ありがとうございます!
なるほど、$formヘルパでcreateするときにモデル名を
指定するんですね。やっと解決できました。
ご助言ありがとうございます!
>>157 よかった。今後は英単語で命名するようにねw
キーボードの半角/全角漢字の列にある 1〜0までの数字を使ってる人いる? 1を押したときにShift押さなくても!が出るようにしてない人て 頭おかしいよね
ファイル(画像とか)のアップロード管理何つかってますか? 追加・更新・削除できるものでお勧めあったら教えてください MediaPluginは更新が出来なかった
>>159 うん。頭おかしいと思う。
>>160 Mediaplugin更新できるでしょ。
ファイルアップロード系は導入するのが面倒で複雑だけど、
がんばってMediapluginを使うようにした方がいい。
自作するよりスピーディーだし、かなりうまく設計されていると思う。
そのレベルの話なら公式で聞いてみたらどうでしょ。
>>161 ありがと。もうちょっと試行錯誤してみます。
163 :
nobodyさん :2010/04/10(土) 00:06:40 ID:XPBwMnMW
layoutに変数を渡したいのですが、 どうやればいいですか?
$this->hogeに渡すと思い込んでましたが setするんですね 失礼しました
Authコンポーネントで質問です。
http://www.facebook.com/ このfacebookのindexページのように、ログイン画面と登録画面をindexに置きたいです。
Authだと、Auth用のusersコントローラを独立して作らないといけない? みたいなのですが、
自分の目的にはAuthを使えるでしょうか?
FaceControllers内
function index, functon edit, function add. function login, function logout,
などと、ひとつのコントローラに納めないとできないのではないかと思ったりして悩んでおります。
たぶん大きな勘違いかと思うのですが、どういうイメージでAuthを使えばよいのでしょうか?
トップはフォームだけで、フォームからUsersコントローラーのaddアクションを呼べばいいのでは?
>>167 ありがとうございます。
いろいろと試してみます。
Authコンポーネントを使うと、 Cannot modify header information - headers already sent by というエラーが出てしまいます。 調べたところ、 <?php ?>の上下の改行をなくす、php.iniでoutput_bufferingをonにする。 などの解決方法がありますが、試しても上手く行きませんでした。 layoutもデフォルトなのでheaderの部分を別個書いた記憶もなく、 ほとほと困り果てました。 なにかほかに解決方法はないものでしょうか?
>>169 appコントローラーで何か文字を出力してるんじゃないの?
171 :
nobodyさん :2010/04/13(火) 05:20:46 ID:4rbnTecY
携帯からのアクセスの場合だけ使いたいヘルパーがあるのですが 動的にヘルパーを読むにはどうしたらいいですか?
>>171 普通にの場合も読んでおけばいいと思うけど、どうしても携帯の時だけというのなら
app::importとかでいいんじゃない?
PC が抜けてた 普通にPCの場合も読んでおけばいいと思うけど、どうしても携帯の時だけというのなら app::importとかでいいんじゃない?
This release marks the last release candidate, before 1.3.0 goes to stable. とあるので、すたぶるが来る日も近そうです
今度のは、どんなバグが待っているのだろう...
1.2.0のときバグなんてあったっけか?
AuthComponent がバグっていたような
ああ、あったねえ。 でも、それって、1.1でも1.2でも穴空いてたような
>>174 昨日の夜に見たときは、なかったんだけどな…日付改竄?キャッシュ?
>>175 このペースでいけば4月26日かな?
181 :
180 :2010/04/14(水) 00:12:06 ID:???
見たの昨日の夜じゃなくて、一昨日の夜だった スレ汚しスマン
182 :
169 :2010/04/14(水) 09:53:38 ID:???
>>170 どうもありがとうございます。
なぜかmodelフォルダのファイルを作成し直したら直りました。
おそらく、ファイルの文字コード関係が怪しいと思ったのですが、結局原因は特定できず。。
ちなみに、Authコンポーネントを使う時は、
pages_controller, users_controller
などと、別途usersのコントローラを作成しますが、
これはわかりやすくするために分けるだけで、一つのコントローラに統合することも可能
ということでしょうか?
>>182 ファイル末尾の ?> を削除するところから始めたら良いことあるかもね
Authについては、まず、Userモデルを使って何か動かしてみれば良いんじゃないかな?
手を動かしたほうが早く身につくよ
184 :
169 :2010/04/14(水) 10:18:49 ID:???
>>183 レスありがとうございます!
末尾の ?>も排除したりいろいろしたのですが、結局上手くいきませんでした。。
どうもDOM付エンコードとかそっち系かなとにらんでおります。
Authは実際に動かしているのですが、usersコントローラのものを
pagesコントローラに少しずつ動かしても結構動くので、もしかして
全部移動できるかな? と思ったのです。
>>184 そりゃ動く
でも、意味がない
しかもよりによってPagesControllerだと、何のため?ってことになるし、単にメンテがしにくくなるだけのような気が
今後もCakePHPを使っていくつもりなら、CakePHPの思想に従ってみたらどうか
186 :
169 :2010/04/14(水) 10:56:37 ID:???
>>185 わかりやすい解説ありがとうございます。
cakeの思想に従うことにして、すっきりするようにします。
validateで質問させてください。 入力時にkeywordsテーブルの name フィールドをチェックしたいです。 class Keyword extends AppModel { public $validate = array( "name" => VALID_NOT_EMPTY, ); } しかし、viewでは $form->input('Keyword.0.name'); 上記のように配列仕様の入力なので、validateが上手くいきません。 $form->input('Keyword.name'); と書けば動くのですが。 上手い方法はないものでしょうか?
>>187 アソシエーションの設定とControllerのsave周りを詳しく
みんなviewはphpコード書きまくり? はるか昔smarty使ってたこととか、デザイナーにphpいじらせたくないこととか考えると smarty組み込みたいんだけど、ヘルパーの引数に配列が渡せなくて詰んだ。 参考サイトは山ほど見たんだけど、$this->aa('key1','value1') で配列生成できているところまでは確認したけど ヘルパー引数にほりこんでもヘルパーが動かない。。。
>>190 きめえwwwそこまでせねばらなんものかwww
いやそこまでせねばならんからそうしてるんだろうけど。
>>189 view で使う程度のphpなら直接デザイナーに教えた方がいいと思うが。
smarty なんて 今の時代に cgi 使ってプログラムやってるようなもん。
>>190 つかそこまでやるやつがなぜbakeにこだわるのかがわからん
>>192 きっとデザイナがviewの中で変なphp書くのが嫌なんだろ
つーか、下手にデザイナにviewいじられるとバグの温床になる気がするんだけど。 さわらせている人っているのん?
システム作ってからデザインさせることになると、デザイナがviewをいじるんじゃないのか やったことないけど
プログラマが「ここにこんなループが来るからその部分のデザインたのむ」って 言えばいいだけでは? 一人で全部まかなってるフリーの立場からしたらプログラマとデザイナがそれぞれ 自分の仕事だけやってればいいなんてうらやましい。だからもっと話して 連携すりゃいいのにと思うなぁ。
ありきたりのデザインなら自分でできるが アーティスティックなのを請け負うと、デザイナ必要になるよね 大抵、ループを説明するより自分でいじったほうが速い
ああそうか 見た目だけじゃなくて、機能を考えたら 例えばリストにするよりか、プルダウンにしたほうがいい なんてことになって、それならAJAXつかっちゃおうとかに なったりしたら、デザインもプログラムもいろいろ いじるところが出てくるな となるとどっちを主導でいくかってところで難しくなるのか なるほどなるほど。 それならいっそう話し合いをして連携しないといけないと思うけど そういう仕事ってディレクターとかコーディネーターみたいなのが 間にいるもんなんじゃないの? 自分で勝手にいじったらいろいろややこしくなるような気がする。
デザイナー、プログラマー以上にまともなディレクターが少ないのがこの業界の癌だよな
ならば貴公がなればよかろうに
政治家の文句も言うが、じゃあ政治家になれと言われたことはなかった
なるほど! そういうことか。 本心では「政治なんて誰がやっても同じ」と思ってるから、 政治家になれとは言わない。 それと同じようにWebのディレクティングも誰がやっても同じだから・・・。
204 :
189 :2010/04/17(土) 13:52:28 ID:???
皆様コメントありがとうございます
>>190 さんの紹介してくれてる記事はもちろん試していて、
$this->aa()でview内でarray生成はできるけど(自作関数内var_dumpで確認)、helper内だとうまく渡せないんです
議論がされてますが、デザイナーにPHP触らせたくないというのが理由です。
こちらデザインは素人レベルでシステムのみ対応しているため、発注元にデザイナーを別途雇ってもらうケースが多いのですが
そのときにコードぐちゃぐちゃにされて「動かないからなんとかしてくれ」となるのが面倒なんですよ
(自作の各種パッケージをちょっとカスタマイズして売る、というやり方を副業でやっているので・・・)
あとはクライアントがsmarty指定するケースも多いです
もう少し軌道に乗ったら、提携デザイナーさんを何人か探して、
その人達を紹介するやり方にかえようと思います。
そんなわけで、1.3からはPHPコードべた書きでいこうと思います。
205 :
nobodyさん :2010/04/19(月) 16:55:28 ID:WgJ57/BK
cakeインストールしたところです Cake is NOT able to connect to the database. と言われましたが、当面はDBを使いません。 このメッセージが出ないようにするにはどうすればいいのでしょうか?
207 :
nobodyさん :2010/04/19(月) 22:23:19 ID:faTvhF7k
以下の処理を実現させたいのですが、CakePHPを初めて2週間の初心者ですので、どのようにすべきか分かりません。ご教授頂きたい。 1.あるテーブルの内容を一覧で表示。(各行にはチェックボックスがある) 2.一覧のチェックボックスにチェックが付いているものを、submitした時、別画面の一覧に表示させたい。 2番の処理をどのようにしたら良いでしょうか?
208 :
151 :2010/04/19(月) 22:37:03 ID:???
チェックされたIDをfindでひっぱってきて表示すればいいんでないの?
209 :
nobodyさん :2010/04/19(月) 23:48:06 ID:faTvhF7k
>>208 返信ありがとうございます。
具体的なコードを書いてくれるとありがたいです。
質問内容が抽象的で申し訳ないのですが…
初心者ということで勘弁してください。
ざけんなボケ
cake以前じゃね?
春ですね
初心者を免罪符にするとフルボッコになる これテストにデルから覚えておくように
>>207 優しい俺が優しく解説致します。
2番の処理を、CakePHPとは関係なくあなたのお使いの言語環境(おそらくPHP)を使って
どのように実現するのか、考えてみれば自ずと分かります。
Cakeで楽になる部分はあっても、素のPHPで(自分のスキル的に)いかんともしがたい部分を
Cakeが良きに計らってくれるというわけでは、必ずしもありません。
季節の変わり目、まだまだ寒い日もあるかと思いますので、ご自愛下さい。
自分で初心者と言うような人でさえさわるようになったってことはcakeもずいぶんメジャーになったんだな
初心者なら素直にステップ1から順に踏んで行くほうがいいよね いきなりcakeから入るより結果的にはそのほうがはやく覚えられると思うし っていうかPHPなんかちゃんと勉強すれば2日か3日ぐらいでだいたい把握 できるんだからそれを省略すんなよと…
PHPが原付免許で、cakeはオートマみたいなもんだなレベル的に PHP学習しても理解できないとか知的障害レベル
PC触って3日目の子が頑張れば構築できるのがcakeなのに 知的障害とかアホか
誰か218を日本語に翻訳してくだしあ
英語が出来ないと辛いぞ
知的障害は言い過ぎ。
>>207 もう見てないだろうけど
DBから一覧を取得したと時に各ユーザー(例えばね)のIDも取得してると思うけど
多分、find('all')で取得でforeachだよね?
<? e($form->checkbox('Model.name.id'))?>
submitで来たあとは1が入ってる人を一覧費だけじゃないかな
人それぞれ成長の度合いって物がある。 自己満足のためだけに発言する自分の卑しさを省みてみなよ。 ひとまずPHPの基本的な本を読んだほうがいい感じだけどね。 他の言語も含めて経験が無ければいきなりフレームワークはやめたほうがいい。
225 :
nobodyさん :2010/04/23(金) 15:32:11 ID:IhQ26v2D
動的にモデルの構造やビューのフォームが切り替わるようなアプリを製作予定なんですが、 こういったアプリにはCakePHPは向かないですか? 簡単に言うと、CMSのカスタムフィールドを拡張したようなイメージで、 データの入力タイプ(フォームの種類、バリデーションのルール)を用意しておいて、 ユーザーの入力に応じて、動的に表示するフォーム・バリデーションやアプリの挙動を切り変えます。 素で作るとすると、データ用の基底クラスを作って、入力タイプごとに派生クラスを作っていく感じになると思います。 こういった独自のクラスをCakePHPのMVCに組み込むのが難しそうな感じがしているのですが、 CakePHPの場合、どうやるのがいいんでしょう? それとも他のフレームワークを使ったほうがいいですかね?
>>225 モデルの構造が変わるっていうのはテーブルを作の?
>.226 モデルのバリデーション機能を利用しようと思っていますが、使い切りのジェネレーターのようなものなので、 今の所、フォームから入力されたデータはセッションに保存する予定です。 ですので、テーブルも作りません。 ただ、後々ユーザーの設定(フォームの組み合わせ)をDBに保存する予定があります。 が、これは動的なフォームを生成・切り替えさえできれば、設定だけ保存しておけば済むのであまり問題ないかと思ってます。 問題はデータ構造の切り替えをどうするか、です…。 例をあげると、 1) ユーザーがドロップダウンリストから「データパターン1」「データパターン2」などを1つ選んでサブミット 2) 画面遷移後、選択したタイプによって、フォームを表示。ユーザーが入力してサブミット。 「データパターン1」の場合は「ドロップダウンリスト」を表示 「データパターン2」の場合は「テキストフィールド」を表示 など 3) データパターンの種類に応じたバリデーションを行う。 バリデショーンは動的に切り替えられそうなので問題ないのですが、 データ構造をもたせたクラスをどう組み込むかで、CakePHPでどうやるのがよいのか悩んでます…。
>>227 の例では項目が1つですが、実際には複数の入力タイプの組み合わせになり、
各項目を操作していく感じになります。
パターン1 = テキスト + ドロップダウンリスト
パターン2 = テキスト + ラジオボタン
など
DataModel(extends AppModel)などを作り、TextDataModel(extends DataModel)などを作ればよいのかな、
(その他、DataModelの組み合わせを扱うモデルクラスなど)
と思いつつ、CakePHPではかえって複雑になってしまう気がして悩んでます。
>>228 うーん。イメージがいまいち掴めない
最終的に保存する例を教えてくれ
あと、セッションに保存したデータはどうするの?そのあと
保存されるデータの例 だった
>>229 フォームに入力したデータそのものは保存しないです。
入力されたデータを計算し、最終的に結果を画面に表示(またファイルにしてダウンロードしてもらう)だけですので。
後々データを保存する場合も、セッションをハッシュ化してそのまま保存しようと考えてます。
計算を行う際(と後々データからフォームを復元する際)に、フォームの種類を「走査」する部分をどうするか、が悩んでいる部分です。
極端な話、モデルを一つだけ作って、その中で
switch($form_type) {
case 'text':
...
case 'checkbox':
...
}
などとし、バリデーションなどだけ動的に切り替えてもいいのですが、
やはり、柔軟性を高めるためにもデータの種類ごとにクラス化したいと思ってます。
似たようなアプリがあれば説明しやすいのですが、なかなか見つからないもので、、、すみません・・・
>>231 外してるかもしれんが自分なら
モデルはひとつ
データに応じてバリデーションを切り替える
種類の識別は、種類を格納したデータを持っておいても良いし、フィールド名(擬似的なフィールド名)で識別しても良い
って感じ。
柔軟性を高めるというのが何を意味しているのかはちょっと分かんなかった
>>233 なるほど。
データの種類ごとにクラス化すれば、処理を委譲できるのでそちらのほうが楽かな、と思ったのですが、
やはり、CakePHPを使う場合はベタな書き方のほうがいいのかな。
もうちょっと色々調べてみます m__m
>>234 クラスにしてもモデルにしてもいいんだけど、
結局データの種類に応じて読み込むんだろうから、一緒かと
あと、バリデーションだけなら、外出しするほどではないんじゃないかと想像
パターンとバリデーションをセットにして記録したモデルを作っておけばいいだけじゃないすかね。
238 :
nobodyさん :2010/04/23(金) 18:27:26 ID:aAazCR87
version 1.2.3でキャッシュを使っているんですが、下のような書き方でキャッシュされません。 どこが間違っているのでしょうか? if( !$list = Cache::read('user_list') ) { $list = $this->Index->getUserList(); Cache::set(array('duration'=> '+5 minutes')); Cache::write('user_list',$list); } キャッシュ時間は Cache::setで設定しろといろいろなサイトには書いてあるのですが、ここを記載しているとまったくキャッシュされていません。(正確にはキャッシュはされているが、Cache::readがfalseを返す) ここをコメントアウトするとキャッシュされています。 ご教示お願いいたします。
>>238 sageてね
Cache::readの前にもCache::setが必要だと思う
が、解決するかは分からない
CakePHP製のソースを色々見てまわってるんだけど、 OOPを活かした書き方をしているものは皆無ですね Javaちっくな書き方をするには、 やはり、フレームワークの縛りが強すぎるのだろうか もし、なにかよいサンプルがあれば教えてください
Javaちっくな書き方したいならsymfonyとかの方が向いてるんじゃない? CakePHPはphp4対応だから無理がある
てか、なんでもかんでもオブジェクト指向にしなくていいじゃん。 継承しすぎて無意味に複雑になってしまうこともあるし。 自分1人でやってるならいいんだけど、多人数でやるなら分かりやすさを優先すべし。
しょうがないのかな まぁもうしばらく使ってみます それとは別に、 へぇ、これもCakePHP製なの?というものがあったら紹介してもらえるとうれしいかも 製作例はいろいろ探してみたけど、全て同じようなものばかりですね…
Numberのサイトとかかな?
でも
>>243 くんが何を持ってCakePHPっぽいと思っているか知らんから何とも言えないけど
>>244 それはどこでしょう?
色々参考になるかと思ってソース見てるんだけど、どれも似たような感じなので…
フレームワークなんで、当然といえば当然かもしれないけど、ちょっとおもしろみがないなと
オブジェクト指向的な記述にこだわる理由をしりたい 俺ならそういうときはJAVAかrubyでやる PHPのOOPはいろいろアレすぎて面倒
サーバーの負荷を考えると cache 使った方がいいんだろうけど、 みんな最初っから cache 使ってプログラム組んでる? サーバーに負荷がかかりまくってやべーなと思ったら cache を使うって方が効率がいいと思うけど。
つーかOOPを活かした書き方ってなんだ?
>>246 ユーザー入力に応じて柔軟に機能を切り替えたいから。拡張も楽だし。
LimuSurveyというのがCakePHPが使われてるらしいと思って見たけど、
中身はCakePHPではなかった。
ttp://www.limesurvey.org/en/demo デモを見たら、これがCakePHPならすげえや、と思ったけど、
やはりこういうのは難しいんだろうね。というか、ソースがごちゃごちゃになりそう。
>>249 難しいこともないしソースがごちゃごちゃになることもないが、きみがCakePHPをdisってるつもりがないなら、比較スレにいった方が良い
symfonyやRuby on Rails やDjangoなど、他にも優秀なFWはいっぱいあるから
あったものを選べば良いんじゃないかな
DBを設計するとき、SQLで外部キーを設定しないでもhasOneとかで設定すれば良いのですか? ガイドブック(1.1)にはMyISAMで作られてたし、SQL文見ても外部キーのことは書いてなかったし・・・ 激しく即出な気が・・・
各バージョンの機能比較してるサイトってどこかにないですか? わかりやすく表形式とかで。
1.3.0使ってみるかな
>>254 みるかなじゃねーよw
使ってみて感想なり批評なりしろよ。
とうとう1.3.0きたか
sql_dumpはエレメンツになってるんかな
インターフェースや継承を駆使したガチガチな感じなんだろうけど AOP的なのの使い所や命名なんかにルールを持たせとけば ゆるくても品質はそんな下がったりせんけどな。 むしろPHPは言語サポートが少なすぎて厳密にやろうとすると疲れる。
言語サポートってmb系のこと?
>>238 キーにアンダースコアを入れるとうまくいかなかった記憶が。。。
cakephpのコーディング規約について質問です 1 $writedata 2 $write_data 3 $WriteData 4 $writeData どれがcakephp流の規約でしょうか。
>>262 変数名が使われるケースはFormHelper::input()くらいかもだけど
$write_data
だね
もっと一般的な例で言うと
$admin_users
266 :
Beginner :2010/04/27(火) 23:53:24 ID:M6fZ8Sga
Routesを使用して開発をしていますが、 以下の場合、逆ルーティングが出来ません。 処理の流れとしては、一覧画面→編集画面→確認画面→(登録完了)→一覧画面 という画面遷移になります。 routes.php Router::connect( '/systemFaqCategories/:faq_category_id/edit/*', array( 'controller' => 'faq_categories', 'action' => 'systemFaqCategoryEdit' ), array( 'faq_category_id' => '[0-9]+' ) );
267 :
Beginner :2010/04/27(火) 23:54:09 ID:M6fZ8Sga
xxx_controller.php //編集画面 function systemFaqCategoryEdit(){ debug('Called systemFaqCategoryEdit'); pr($this->params); $this->editFaqCategory('systemFaqCategoryEdit', array( 'class_information_id' => FAQ_CATEGORY_TYPE_SYSTEM, 'faq_category_id' => $this->params['faq_category_id'] ) ); }
268 :
Beginner :2010/04/27(火) 23:55:19 ID:M6fZ8Sga
//編集画面or確認画面or登録 を分岐 private function editFaqCategory($actionName, $condition) { if ($condition['class_information_id'] == FAQ_CATEGORY_TYPE_SYSTEM) { // 編集画面 確認ボタン if (!empty($_POST['confirmation']) && $_POST['confirmation']) { $this->editConfirmation(); return; } // 確認画面 戻るボタン if (!empty($_POST['return']) && $_POST['return']) { $this->editReturn(); return; } // 確認画面 登録ボタン if (!empty($_POST['save']) && $_POST['save']) { $this->editSave(); return; } if($sId <> '') { $getFields = array('id', 'class_information_id', 'category_title', 'regist_id', 'update_id', 'created' ,'modified'); $this->data = $this->FaqCategory->read($getFields, $sId); $this->render('edit'); } } }
269 :
Beginner :2010/04/27(火) 23:57:37 ID:M6fZ8Sga
edit.ctp <?php $confirmButton = array( 'controller' => 'faq_categories', 'action' => 'systemFaqCategoryEdit', 'faq_category_id' => $this->params['faq_category_id'] ); e($form->create('FaqCategory', array('url'=>$confirmButton))); e($form->submit('確認', array('name' => 'confirmation', 'div' => false, 'tabindex'=>1))); ?> 以下 入力inputのHTML 確認画面へ遷移した時に、ルーティングがきいていない。 URLがコントローラ名+アクション名になってしまう。 解決策をお持ちの方は教えてください。 長い文章になってしまったのはご了承ください。
sageてね あとバージョンを書いて んでRouter::URL()でリバースルーティングできるかを教えて
CakePHP1.2.6使用です。 モデルのsaveでNULLを入れたいときはどうしたらよいでしょうか? OrderというモデルのpriceをNULLにしたかったので $this->data['Order']['price'] = null; とか $this->data['Order']['price'] = ''; してから $this->Order->save($this->data); したのですが、DBには0という値が入ってしまいます。 もちろん、DB側ではNULL化というテーブル定義にしています。
最近さわりはじめてちょっと疑問に思ったことがあるので質問です。 今、適当な練習用サンプルを作っています。 利用するデータの編集をscaffoldを利用して作成しました。(Viewのみ多少修正) しかし、削除のパスもリンクで表現されているので、(/hoge/delete/1 のように) クローラーが巡回してきたらすべてのデータが消える気がします。 このデータは特に秘密にしたいようなものではなく、むしろ利用者で好き勝手に編集して問題がないので、セッション管理は行っていません。 セッション管理などしてない場所でscaffoldを利用するというのは想定外なのでしょうか。 現在はセッションを利用して対策する方向で修正していこうと考えていますが、 「何らかの対応方法がcakephpに用意されている」もしくは「もっと単純な対応策がある」 といった情報がありましたらぜひ教えてください。
273 :
272 :2010/04/28(水) 17:04:13 ID:???
Cakeのバージョンを書き忘れました。 1.3を利用していますが、他のバージョンに変更も可能です。
>>271 普通に保存できると思う。少なくとも自分はできてる。
DB側のデフォルト値をNULLにしとけば間違いないはず。
CakePHPはNULL使わないほうがよいみたい。
バリデーションもnullの扱いがおかしすぎる。
バリデーションでnullって何か不具合あったっけ?
>>274 さん
返答ありがとうございます。
既存のレコードに大して実行すると、
ななんと「0000-00-00 00:00:00」という値が入ってしまいます。
これってバグ?なんですかねー。
明示的にNULLにUPDATEするためにはSQL書かないとだめなのかなぁ。
>>270 返事遅くなりまして申し訳ないです。
バージョンは、1.2.6です。
Router::URL()で逆ルーティングできました。
$url = Router::url(array(
'controller' => 'faq_categories',
'action' => 'systemFaqCategoryEdit',
'faq_category_id' => $this->params['faq_category_id']
)
)
e($form->create('FaqCategory',
array('url'=>$url)));
にすると、
<form id="FaqCategoryEditForm" method="post" action="/xxxx/xxxx/xxxx/xxxxx/systemFaqCategories/1/edit/">
変なURLが生成(先頭の/xxxx/xxxx/が余計)されてしまう。
>>275 nullはバリデーションのrequiredではじかれるが、allowEmptyではすり抜ける。
>>276 一部だけ更新したい場合は、事前に関係ないフィールドをunsetなどしておいたほうが安心。
特にループ中で保存する場合は思わぬデータが更新される場合がある。
コントローラーからなら、$dataに更新データが入っているとしたら、
$this->Model->create(null);
$this->Model->set($data);
if ($this->validate()) {
}
間違えて送信してしまった。 $dataに更新用のデータが入っているとしたら、下のようにするくせをつけておいたほうが安心。 // 更新する場合はキーを指定 // $data[$this->Model->alias][$this->Model->primaryKey] = 更新するレコードのID; // $dataにフォームから受け取ったデータなどを設定。 $this->Model->create(null); // モデルのデータを初期化。 nullにしないとDBのデフォルト値が入る。 $this->Model->set($data); // モデルにデータをセット。create()しておかないと、前回のデータとマージされる。 if ($this->validate()) { $this->Model->save($this->data, false); }
>>if ($this->validate()) { f ($this->Model->validate()) { だった。上記のようにしたらnullもいけないかな? だめならDB側のデフォルト値をnullにしておいて、 unset($data[$this->Model->alias]['created']); $this->create($data); // データがないフィールドはデフォルト値を使うようにする。 $this->set($data); ...以下同じ... とかしてみたらどうだろう?
何度もすまん。 $this->Model->create($data); // データがないフィールドはデフォルト値を使うようにする。 $this->Model->set($data); だ。 create()の中でset()と同じことされるからset()はいらないかもしれない。
>>281 create()は主キーもリセットされてしまいます
ですから、この場合のset()は必須です
NULLを使わない設計ができるのであれば、それに越したことはないです
>>277 解決方法は↓いずれか
1. Router::url($url ,true) をformのurlに指定する(第2引数でフルURL)
2. (アクセスしたURLと同じ場合)$this->here
3. $form->createに渡すURL配列に 'id' => "" を含める
3.は前スレだかに書いてあったやつだが試してない。ぜひ試してもらって結果教えて欲しい
CakePHPではNULLを使わないのが正解 どうしてもNULLを使いたいなら、ここまでに出た方法のどれかで凌ぐしかない
ま、そういう造りだよね。はじめは気持ち悪かったけど慣れれば無問題
cake 1.3 DBはmysqlの5.1.41 です。(xampp最新版を利用) ランダムに1件レコードを取り出そうとして $this->hoge->find('first', array(order'=> 'rand()')); はうまくいったのですが、 $this->hoge->find('first', array(order'=> 'rand(100)')); のようなシードを指定しての取り出しができません。 発行されているクエリは SELECT …… ORDER BY rand(`100`) ASC LIMIT 1 のようになっており、エスケープされてしまっているようです。 エスケープさせない方法、または、シードを固定してのランダム取り出しの方法はないでしょうか?
288 :
287 :2010/04/29(木) 22:54:24 ID:???
とりあえずの応急処置(バッドノウハウ的な) $this->hoge->find('first', array(order'=> 'rand((100))')); としてrandにカッコを二つ続けて入れることで、置換対象から外しました。 queryのプレースホルダ的な感じでやりたいので、正当なやり方があったらぜひお教え願います。
>>288 $this->hoge->fing('first', array(
'order by rand(?)' => 100
));
でできない?
conditionsではプレースホルダ使えるけど、orderはできないかな?
試してないのでわからんが
>>272-273 以前議論あったがscaffoldはそういうものっていう結論に落ち着いてた
bakeして、それを書き換えてあげるしかない
>>290 ありがとうございます。
scaffoldはそういうものということで納得します。
bakeして書き換えも試してみようと思います。
scaffold使うより自分で書いたほうが早くないか?
やばい、わかり始めるとホントに楽しい。
でもそのうち単調な処理を書くのが嫌になってくる
分かり始めたと思ったらHABTMでわからなくなった。 cakebookのHABTMを保存の項がリンクおかしくなってるし。
>>295 タグ機能の実装解説してるブログなどを参考にするとわかりやすい
フォームにテキスト入力した時、半角英数入力に自動的になるような viewの書き方はあるでしょうか? validateでalphanumericをすると、事後的にチェックはできるのですが、 そもそも入力した時点で半角しか入力できないようにしたいのです。 formのtypeをpasswordにしたらそのような設定になるようですが、 textで見えている状態で強制的に半角入力にする方法を探しています。
>textで見えている状態で強制的に半角入力にする方法 ってことはアプリ側のロジックでなくて、ブラウザ側の話になるんでは? スレ違いだけど、CSSのime-modeとかある、
>>294 なんとなくわかるわw
それに同じようなコードを書くことになるんだよな・・・
>>298 ありがとうございます!
ブラウザ側から処理するcakeの機能がないかなと調べていました。
ぐぐって調べてみます!
これだけ機能があるのにアップロードの機能は乏しいんだな・・・。 Media プラグインはなんか扱いにくそうだし。 画像のURLとアクション呼び出すURLの仕組みの違いもわからんし…
>>299 横レスだが、俺は今更ながら本家RoRに浮気してみてるところ。
Cakeに対して理解をもってから望んだら、おもしろいくらいRoRがさっくり理解出来そうだったので。
で、CakeにあったDRYじゃない感やなんかがRoR(というかRuby)で解消されるならあっちに旅立つ予定。
やっぱCakeがいいやってなったらしれっと戻って来るw
>>302 興味深いからその後どうなったか教えてほしい
俺はRoRを使えるような場に恵まれないため今のとこ利用しないが。
1.2から1.3の移行が結構大変・・・
1.2から1.3で変わったことまとめとか探し中
そんなに困るほどはかわってないきが
$sessionが使えなくて迷った
307の補足ね。 layoutのdefault.ctpとか、1.2だと $session->flash になってるんだけど、1.3だと $this->Session->flash になってる。レイアウトを移行する時は要注意。
公式にあるまとめでいいじゃん
>>308 違う、$this-> は推奨だけど無しでも動く
echoが必要になった
echo $this->Session->flush();
あと移行ガイドのリンクがテンプレ
>>1-5 にあるからね
>>310 本当だ。移行ガイドにも書いてあった。ありがとう。
移行ガイド、斜め読み程度で良いと思ってたけど、しっかり読もう。。。
漢もすなるフレームワークといふものをしてみむと思ってるんですけど、 CakePHPっていうのが人気なんでしょうか。 NetBeansのプラグインにSymphonyっていうのとZendっていうのしかないんですけど それでもCakePHPがいいですかねぇ?
しらん
>>313 プラグイン?なんだそれ、喰えるのか?
俺はPHPエディタの延長のつもりでNetBeansでCake焼いてるよ。
動的言語にIDEなど不要
>>315 プラグインのことは気にせずやってみます。
>>316 IDEは便利ですよ。
使わないのは損です。
動的言語にも使えるIDEの機能は大抵テキストエディタでも実現できる
NetBeansと同等のことができるテキストエディタ教えてちょ♥
vimもIDEになりますか>< CakeOnVimを使ってるけれど、そこまで重要なファクターではないなあ
vimって使ったことないけど 自動補完とか文法チェックもできるんだね でも見た目がアレだから、慣れないとストレスたまりそう…
MacのTextMateでCakePHPのBundleを入れてる。 Railsのスクリーンキャストでよく見かけるTextMate的な補完や操作が出来る。 昔はEclipseとかZDEとか使ってたけど、PHPに限って言えばIDE不要。 手になじむエディタ(それが人によってemacsかvimか秀丸かEmEditorかTextMateかBBEditか変わるが) があればむしろ小回りが効いて良い。動的言語で手練れになるなら絶対コッチ。
補完だけならね FTPやらバージョン管理やらしようと思えばIDEのほうが断然便利だな 関数の定義元も一瞬で表示されるし
ここはrsyncコマンドやscpコマンドやsvnコマンドやgitコマンドが使えないインターネッツですね
IDEのほうが断然便利だな
じゃぁちょっと使って見るかな
IDEは便利。 一発で整形が出来るのが便利。 エディタでも出来るかもしれんがw Xdebugとか要求してきてメンドイが
1.3使っているのですが、 Shellから 静的HTML吐きだしたいのです。 ctpとViewのrender使ってレンダリング結果を保存しようとしたのですが、 ViewTaskも使えず、 Controllerをnewしてrenderしてもエラーがでてしまいます。 どなたか対処法ご存じないでしょうか? 上記方法はぐぐってでてきたので試したのですがダメでした……。
>>328 html_cacheというafterRenderでhtmlファイルを生成するplugin を使ったほうが早いかも
shellじゃないとだめなの?その場合は必要なファイルをimportしてnewしてって面倒くさいと思うが、今どう書いているのか教えれ
>>329 おお、そんなプラグインが……。
調べてみます。ありがとうございます。
shellでやりたいのは定期実行で、
古い記事を静的ファイルに落とす処理なのです。
URL叩くのでも良いのですが、その他の処理はTaskになっているので出来れば一度にやりたいと……。
以下、全てShell内部でやってます。
1. 既存コントローラ new
// DebugKit がどうとかでてエラー
App::import('Controller', array('Posts'));
...
$controller = new PostsController();
$controller->components = array('Auth');
$controller->constructClasses();
$posts = $controller->__createStaticHtml();
2. 只のコントローラ new
// エラー
App::import('Core', 'Controller');
...
$this->controller = new Controller();
$content = $this->controller->render('archive' , '' , $filepath );
3. ViewTask
// エラーorz...
var $tasks = array('View');
...
$this->View->getContent('archive', $params);
Paginatorを使ってみたんだがURLが汚すぎて使い物にならないな… せめてGET方式に簡単に切り替えられないもんかね? paginatorヘルパーのオプションでクエリを指定すればそれっぽくはなるんだが、 ソート(order)指定していると、ページリンクでコロン付きのリンクが生成さえれてしまう…
pagitorのオプションで 'url' => array('order' => null) でいけたわ ほんと、モデル名がURLに出る仕様はどうかと思うわ 自前でクエリのパラメータ名とModel::paginate()のオプションを相互変換する処理書いたが、 もうちょいうまいやり方はないものなのかねえ
ルータ使うのは?
>>333 ルータ使っても名前付きのパラメータついちゃうねえ
page:2 とか
ルータで細かく指定すれば逆ルーティングしてくれるの?
ちなみに、ルーティングしてない状態だと /sort:Table.created/direction:desc とかなってる。 ルーティングだけで /date/desc みたいにできるもんなの? できなくて自前で書いちゃったんだけど、細かく指定してできるんならそっち使うわ
ちょい試したら Router::connect('/search/:page', array('controller' => 'Product', 'action' => 'search') ); とか書いたらいけたわ… ソートのほうは、表示名変えるには一個づつ全部かかないと駄目そうだけど (逆)ルーティングもだいぶ賢くなったんだなあ
ソートもこれでいけた Router::connect('/product/search/date/:direction/:page', array('controller' => 'Product', 'action' => 'search', 'sort' => 'Product.created') ); ソートキー分だけ全部書かないとだめそうだが、いけた 第3引数で数字のチェックとかすれば、これでいけそう あなどってたわ・・・w
virtualFields使ってる場合に問題があるみたい Router::connect('/product/search/price/:direction/:page', array('controller' => 'Products', 'action' => 'search', 'sort' => 'Product.price') ); こんな感じのルーティングで、Product.price がvirtualFieldsの場合、 ソートの方は $paginator->sort(...) で逆ルーティングしてくれるが、 $paginator->next(...) なんかは逆ルーティングできない Router::connect('/product/search/price/:direction/:page', array('controller' => 'Products', 'action' => 'search', 'sort' => 'price') ); とか書いたら $paginator->next(...) のほうはうまくいったが、今度はソートのほうが逆ルーティングできない 両方書いてみたらぱっと見はうまくいくけど、ソートの昇降が切り替えられなくなった バグだよね
ルーティング関係なかったわ virtualFieldsのsort()自体にバグがあるみたい 昇降切り替えができない
>>339 virtualFieldsだと、Controller::paginates()で$paging['options']['order']のモデル名が消えてしまう模様
そのせいかわからないがPaginator::sort()が切り替えられない(逆ルーティングはできる)
Paginator::prev()で逆ルーティングできないのもそのせいかもしれない
原因探してもよくわからないから、paginatorヘルパーのオプション['url']['sort']を明示的に指定するようにしたよ…
hasManyのモデルのバリデーションってどうすればいいんでしょ? $this->A->B->create($this->data); if ($this->A->B->validates()) {.... って感じでバリデーションを調べようとしていて hasMany関連だから$this->date['B'][0]['field']の形式なんだけど $this->date['B']{'field']っていうフォーマットってじゃなきゃ、バリデートしてくれないみたい 英語、日本語でググってみたけど、なかなか解決できない… 誰か知ってたら教えてくだせえ
model内でSessionコンポーネントを使う方法はあるでしょうか? 下記のように書いてみましたが、Session->writeでエラーが出てしまいました。 コントローラに書いた場合、 authByHashは上手く機能するのですが。。 class User extends AppModel { public $components = array("Session"); function authByHash($id = null){ $conditions = array("hash" => $id); $user = $this->find($conditions); $this->Session->write('Auth',$user); if(!empty($user) ){ return true; } else { return false; } }
そもそもmodel内でSessionを使わなければいけないという設計が変だと思う
>>342 saveAll で、validation => false or only
でいけると思う
Virtual fieldsは、1.3以降の機能?
Auth ログイン情報をブラウザ閉じても保存したいのですが、 オススメの方法はあるでしょうか? コンポーネントとか使わずに、クッキー処理が正解なのかな。
cookieコンポーネント。
thx!
ググればたくさん出てくるよ 公式のフォーラムにもあったはず
1.2で開発してるんだが、コンソールで管理するためにシェル書いたんだけど、 Class 'Model' not found in /path/to/app_model.php on line 39 ってなって動かないんだけどこれってバグ?しかも、毎回なるってわけでもなく、たまには動くんだよな。謎。
354 :
347 :2010/05/10(月) 02:18:33 ID:???
cakephp便る杉ワロタ 無知の俺でもデータベース使いまくリングw
>>345 いけた!ありがとう!たすかったw
てかsaveメソッドなのにsaveしないならvalidatesに引数渡して判断さしたほうが
わかりやすいような気がするぜこれw
358 :
nobodyさん :2010/05/11(火) 15:29:46 ID:7YcJ1BHK
皆さんに2点質問です。 cakephp1.3使ってます。 sanitizeについてなんですけど、 mysqlにtext,textareaでデータを格納するとき、 ■Sanitize::clean($this->data)か Sanitize::html($this->data['User']['・・・']; どっちつかってますか? ■sanitizeしたデータを取り出すとき、(例えばaddしたデータをeditするときなど) おおおおおお\n<a href=ageorgja>あぞあおb</a>\n<?pjfeowjfo>fewjfoewjoewjfoewdj<?>\n<?php fjaeof こんな風になってしまうんですけど、いい回避方法教えて下さい。
>>358 >こんな風になってしまうんですけど、いい回避方法教えて下さい。
Sanitizeを使わない
CakePHP1.2とmysql5.1を使っています。 みなさんに質問なんですが、編集、削除時の楽観排他はどうやって実現されてますか? 1.データ取得時に、更新日時を持っておく。 2.編集(削除)実行前に、対象データを検索して、更新日時を取得 3. 1と2の更新日時を比較 4. 同じなら編集(削除)実行、違ったら何もしない。 こんな感じでしょうか? CakePHPでSELECT FOR UPDATEってどうやって実現するのでしょうか? 普通にSQL文を投げる?なんとなくCakeぽっくないですが・・・
362 :
358 :2010/05/12(水) 13:42:37 ID:ISVrEn/n
スレ違いかもですが、サイト運営したことないんですけど、やっぱ sanitizeしないと危険ですよね? 皆さんどーしてはるんですか?
>>362 DBには素のデータを保存し書き出すときにエスケープが基本やで
あとsageてな
>>362 サニタイズは必要だよ。
359の方法は試したのか?CakePHPのソースあるんだから、人に頼る前に自分でコード追ったり、
どんなSQL文が発行しているのか、確認した方がいいんじゃないか?
ここ、質問スレ?
×SQL文が ○SQL文を
勉強会1時間で埋まったね。
実質30分足らずだった。いったん埋まった後、重複申込みとか消して、その分が埋まったのがその30分後くらい? あしたまたあるってのは運営GJだと思う
368 :
sage :2010/05/13(木) 22:02:44 ID:DXEWzNfV
358です。
>>363 ありがとうございます。
2ちゃん素人なもんでsageは初めて知りました。
>>364 ありがとうございます。
あと、最初にスレ違いかもって断ったし、近くに質問する人いないんで、
勘弁してくださいよ。
勉強会、今日はペース悪いな 1時間で半分も埋まってない
サニタイズはやっちゃだめだよ
372 :
sage :2010/05/14(金) 13:28:20 ID:UVik1blM
>>371 その心は何ですか?
たしかにcleanすると、<記号とか全部変換されちゃってちゃんと
取り出せないから使えないかなとは思ってますが。
サニタイズってもSQLインジェクション対策の部分とXSS対策の部分があるから なんでもかんでもエスケープだのタグを無効化だのしとけばいいってわけじゃない。 データをDBに出し入れする時とビューで表示させる時で分けて考えれば良いよ。
つか1.3はどんな機能が拡張されていくんだろうかな… 出て早々だが、バージョンアップが楽しみだ
1.3の中では正直機能追加してほしくない・・・
下記サイトの記述に従って、PaginateをModel中で上書きしたところ、Viewで、
”Undefined variable: paginator”と出るようになってしまいました。
どうすれば、View中で$paginatorを取得する事ができるでしょうか。
http://book.cakephp.org/ja/compare/249/Custom-Query-Pagination model/group.php:
class Group extends AppModel
{
function paginate($conditions=null, $fields=NULL, $order=NULL, $limit=20, $page = 1, $recursive = null, $extra = array()) {
$conditions = array("Group.id" => "1");
return $this->find('all', compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'));
}
(以下略)
}
views/group/index.ctp:
<?php echo $paginator->prev('< 戻る', array('class'=>'effectived'), null, array('class'=>'disabled')); ?>
(以下略)
エラーメッセージ: ”Undefined variable: paginator [APP/views/group/index.ctp, line **”
コントローラーでPagenatorHelper読み込んでないとかじゃないよな
あと paginate メソッドもいろいろと間違っていると思う
が、modelの中で上書きは関係ないから、まずは
>>379 あたりからひとつひとつチェックしていくべし
ひとつのビューに複数ボタンを設置して、押されたボタンによって処理を分けたいのですが、 押されたボタンの名前が入る変数はdataで良いのでしょうか? <input type="submit" value="登録" name="toroku" /> を押した場合、どの変数にどの様に格納されるのか教えてください。
>>381 var_dump()なり、pr()なり、debug()なりする。
そんなもん、いちいち聞くな。
自分で実行したもんは、血となり肉と成る。
突然、あるコントローラのアクションが2回呼ばれるようになっちゃった 今は問題の切り分けのために、アクションの中身はfile_get_contentsで文字列書き込んでるだけのシンプルな形。 なぜかわかる人、教えてください・・・
>>384 2回呼ばれるというのは何をもって言ってるの?
アクションの先頭でdebug()おいて二回表示されるとか?
たんにfile_get_contents()が二回されてるだけ?
387 :
nobodyさん :2010/05/21(金) 10:32:14 ID:2DyunNSv
>>385 1.2.6です
>>386 $text = file_get_contents('test.txt');
$text .= 'a';
file_put_contents('test.txt', $text);
アクションの中身はこうなってて、1回叩くだけでtest.txtの中身が「aa」になっちゃいます・・・
>>387 debug( file_get_contents('test.txt') );
file_put_contents('test.txt', date() ,FILE_APPEND);
で、問題を切り分けてみたら?
389 :
387 :2010/05/21(金) 12:42:28 ID:2DyunNSv
必要なのはまずdebuggerの環境だとおもうけど。
391 :
nobodyさん :2010/05/21(金) 22:22:23 ID:dGPdEg+u
LLのフレームワークは使用するのに どうしても多量のバッドノウハウが必要になるからな・・・
バッドノウハウが必要ないFWって?
>392 皆が理想としてるFWじゃ?
あぁ、宗教の話か。
>>387 test.txtに"a"が入ってるなら
$text .= 'a';が .= になってるから結果が"aa"になるに決まってんじゃん
ひねくれ過ぎワロタw バッドノウハウの総量の話だろw
cakeで普通に書いててバッドノウハウが必要なことなんかあるっけ?
うん、あり過ぎるね しかも基本的な所にわんさと 慣れると不感症になるけどね 俺もそうだけどさ
多過ぎていちいち列挙すんのめんどくせ 誰でも分かるほんの一例としては バリデーション周りやらAuth周りやら 挿入周りにすらあるし 挙げ始めたらキリないって
>>400 例えばってんだから、ひとつ例を挙げればいいだろ。
それとも挙げられないのに、さもあるように言うnoobさんですか。
挙げた一例から 何がバッドノウハウに該当するか 自分で判断出来ないだけでしょw
まぁ、例えば?って聞いてる人に対する答えにはなってないわな
>誰でも分かるほんの一例としては >バリデーション周りやらAuth周りやら >挿入周りにすらあるし これでピンとこない分からないレベルの奴に いちいち手取り足取り指導なんてしませんよw
w
406 :
nobodyさん :2010/05/22(土) 19:39:37 ID:hO+yRnh4
bakeのおまじないとかあったしなw
>>404 手取り足取りとかピンと来る、という表現がnoobなんだよ。
あたしのためにケンカはやめて!
意味ないこと書きこむ暇があったらバッドノウハウの一例でも書きこめよ
必要なバッドノウハウって意味分からないんだが。
security componentとかかな。
うるせぇな。 空気嫁よ。 多すぎるって言ってるだろ。
ま、どんな言語、FWにもバッドノウハウはつきものだと思うよw
Cakeは実装部ソース見ないといけないとかごくごく普通だしね 阿藤快もなんだかなあって言ってたよw
バッドノウハウの定義って何だっけ? ORマッパーのGROUP BYとか、そのへんも含まれる?
つーか、オフコン、クラサバVB、java 黎明期、struts+spring全盛、RoR & Cakeと 渡り歩いてきた爺さんとしてはCakeのソースが一番汚なくて、パッと見判別がつかねぇな。 クラサバはなんちゃってPGが溢れた時期でソース自体が汚くて見る気が起きなかったし、 javaも似たようなもんだが、Cakeはなんつーか、ほんとにこんな方向に発展したかったん だろうか、と素朴に思うよ。 まぁspringのxml見たいに、書いてるxmlが本当に意味があるんだろうか、という異次元の 悩みよりはマシだが、ちょっとそのproject離れるとCakeは一から追わんとワカランな。
つか単にPHPが一番汚く書けるってだけじゃねえのオッサン
汚いってのはお前らのコードが汚いってわけじゃなくて、コードパターンが なんつーかとにかく汚い、arrayと->の洪水ってか、xml hellに似てるよ。
おっさんからみてRoRはどう? 配列地獄を使わないPHP FWとかはどう?(これでも->からは逃れられないか) そうなってくるとCakeっつうよりPHPの言語仕様の問題になってくるな
Quercusとかあるし フレームワークもJavaVMで書く方向になればいいのに。 PHP以外の好きな言語で書けるし、 ライブラリやエンタープライズ向けの環境も自動的についてくる。
言語が使えるってだけで、その言語のライブラリが全て動作するかっていったら 結構動かないからな。 独特の挙動も多いし厄介。
422 :
nobodyさん :2010/05/25(火) 18:49:36 ID:kFSX6Hgc
formヘルパーで メールアドレス[ ] (name属性はemail) メールアドレス(確認)[ ](name属性はemail_confirm) みたいなのを作ったんですが email_confirmのバリデーションで 'rule' => array('equalTo', $email )としたいのですが可能ですか? マニュアル見ても本見ても変数使ってるところがなくて悩んでます。 バージョンは1.3です。
>>422 sageてー
その位置に変数使えないでしょ?
独自バリデーションを作ればOK
便利系validationをみつくろってプラグイン化してくれている人がいるから、探すもよしだな
お、すいません。 了解です!ありがとうございます。
結局コントローラでバリデーションの定義しました。 汚いですが…
今からCakePHP始めるなら1.3がいいですかね?
なんで?
便利な機能がありそうだからって感じじゃないかな でも不具合も多そうだし、これから触るのであれば安定版使うほうがいいだろJK
429 :
426 :2010/05/25(火) 21:41:26 ID:???
1.3.0も安定版って書いてあったんで^^
マジで
俺は語尾が好きな数字のモノを使ってるよ
す スイーツきた!
433 :
nobodyさん :2010/05/26(水) 15:07:53 ID:3pytNVWj
Var.1.3で、"app/plugins/プラグイン名/views/layouts"内の、 レイアウト使うにはどうすれば良いですか? Ver.1.2なら、"app/views/layouts"内のレイアウトより優先的に使えてたのですが。
>>433 1.2と同じようにプラグインの中のレイアウトを読んでくれてるけど、うまくいかない?
435 :
433 :2010/05/26(水) 16:02:21 ID:???
>>434 すいません勘違いしておりました。
ありがとうございました。
436 :
nobodyさん :2010/05/27(木) 03:36:15 ID:cH14ywiE
Cake初心者でbake使ったことないけど、 Bakeって使えるの??
437 :
nobodyさん :2010/05/27(木) 03:37:34 ID:cH14ywiE
あ、あとCake使えるようになったら、他のPHPフレームワークもスグ理解できる ようになるかな?
あなた次第だね
Cakeの勉強会楽しそうだなぁ
Cakeの.htaccess設定って本買って勉強するような技術? 公開鯖に上げられないんだけど。
勉強会行く人いる? このスレの住人と会えたらいいなーと思ってるけど。
いくら?
cssファイル内で画像を設定するとき、例えば background-image: url("/(アプリ名)/img/aaa.png"); などとしますが、上記のアプリ名の部分が変更された場合に自動で追従するには どうすればいいものでしょうか?
446 :
445 :2010/05/28(金) 13:43:33 ID:???
>>445 1.2ならvendors、1.3ならpluginsに入れてしまう。という手もあると思う。
app::importしてviewに表示ってことですか?
>>445 background-image: url("/app/webroot/img/aaa.png");
でいいじゃないの
オープンになっているプラグインの一覧ってどっかない?
>>449 CakePHPってこんなことまでできるんですか??
> 445 俺だったらシンボリックリンク使うかな。
>>542 モデルに書いた方が後でごちゃごちゃしないのでオヌヌメ
質問です。 CAKEの本でなにか初めての人向けのお勧めの本ってありますか? リファレンス的な本はCakePHP ポケットリファレンス買おうと思ってるのですが 探してみたんですがあまり評価のよろしくないものが多いので・・ おねがいーします。
>>457 この本ってアマゾンの評価みてもわかりにくそうな印象が・・
大丈夫でしたか?
またサンプルもCDも付属なし、ダウンロードもできないっぽいですが・・
CakePHPは1.3がでてしまったからなー。 どの本も時代遅れさー。
俺はいろいろ本を買ったが、一番役に立ったのは「CakePHP ポケットリファレンス」だった
>>459 >>460 そうなんですよねー、1.3って1.2と比べて機能とかけっこう違いあります?
CakePHP ポケットリファレンスはamaの評価もよいしリファレンス本は必要なんで
買う予定なんですけど、他の本ってどれもイマイチ評価悪いんですよねー。。
457さんの本は値段も微妙に高いしちょっと買うのに躊躇が・・。
ガイドブックは読みにくいけど内容は一番まともだと思う さわりの部分をひととおりさらうにはいい でもそんな目的のためにあの値段は高過ぎる・・・ 半分の薄さで簡潔に書いてくれて半額のほうがいい本になって売れると思うけどなぁ
ガイドブックはざっくり目を通すには悪い本ではないと思う ただ誤植が多くて、サンプルがどのコードに対応するのか分かりにくい 手を動かして練習するには不向きな気がする
466 :
nobodyさん :2010/05/30(日) 22:55:03 ID:aCIlDOev
ショッピングカートの 注文部分みたいなのどうやって作ればいい? カートの中身→住所入力→支払い方法入力→確認画面→完了みたいなの。 希望としては、URL直接入力でいきなり途中のページ、たとえば支払い方法入力 ページにいけたりしてほしくなく、決めたとおりの順序でしか 表示されないようにしたい。 だからURLは全部同じになるのかな? でも可能なら、戻るや進むは理想どおりに動いてほしい。 これはURL同じじゃ実現は難しいのかな? どうするのが一番いいんだろう。 別にCakePHP以外の話でもいいんだけど、 こういうところ、みんなどうやって作っているのか気になる
>>466 cakeに関係なく普通はセッション使うのでは。
フラグを立てればいいかも
>>466 セッションに前の画面から来たという証を入れといて
次の画面で照合する。
これをやらないとCSRF脆弱性に繋がるよ。
session_regenerate_id(true)とかは?
CAKE本についてありがとうございました。 参考にしてみます。 近所の図書館にガイドブック1.2あったんでとりあえずそれでしのいで 1.3の本でてから買うことにしました。
>>469 そういうこまごまな雑用を
やらなくてすむのがフレームワークじゃないんですか?
473 :
nobodyさん :2010/05/31(月) 02:22:36 ID:UmKeQ4JH
ヘルパーの中読んでるんだが なんか実装するつもりだったんだろうけど動作してない機能とか変な引数突っ込んだらバグるメソッドとかぽろぽろ見つかるな あとオーバーロードを無理矢理実装するのはやめてくれ HtmlHelper::tableCellsとか酷すぎ
>>472 security component使うのがcake流では?
cakephpって有名な企業とかで使われてる?
Firefoxアドオンサイト
477 :
nobodyさん :2010/05/31(月) 16:46:23 ID:SYZ/fufa
hogehoge.comへアクセスした時 www.hogehoge.comへ変更するのは.htaccessを弄るしか方法ないでしょうか?
もしCakeでやるのだったら、 AppController の beforeFilter で、ホストを取得して、それを元にリダイレクトかければいいんじゃない。 上記方法でやるよりも、.htaccessでやるのが全然いいと思うが。
1.3.0さわってみた記念 ところでsqlite3を使いたくてgithubのDBOを入れて使えるようにしたのだが bakeでmodelを作成できないのは仕様?
form->radioで、未選択時の値を選択なしにする方法はありますか? $options に値「0」のデータが含まれていると、未選択時にこの値が選択されてしまうのです。 form->selectの第3引数に$selected = nullを指定したときと同様の動作を望んでいるのですが。
1.3使ってます。 Formヘルパーで、checkboxを以下のように出力したとき、divが消せないんですけど これってどうやれば良いんでしょうか? <?php echo $form->input( 'search3', array( 'type'=>'select', 'multiple'=>'checkbox', 'div'=>false, 'label'=>false, 'options'=>$lists ) ); ?>
482 :
nobodyさん :2010/06/03(木) 11:12:40 ID:mt7KSN2e
つい先ごろからCakePHPを利用したアプリ作ってます。ver1.3です。 質問ですが、よくある検索条件&一覧の画面で、paginate使う場合にソートや ページング後に検索条件を保存する方法はフレームワークで用意されてない のでしょうか。 ない場合、定石的にはどうするのでしょうか。sessionに入れるというのは一つ 思いつきますが、できればやりたくありません。 よろしくお願いいたします。
>>482 ない
あと同じ質問以前にあったから検索すること
>>482 Search Plugin 使うとよい
485 :
nobodyさん :2010/06/04(金) 03:35:38 ID:NZTGzHeO
MediaPluginって、モデルごとにサムネイルサイズ指定できない? Configure::write()での指定をモデルごとに入れてやろうかとも思ったけど、 viewで表示する際ソースのheight/widthに数値入るから不具合起こりそう なんかいい解決方法ないですか? 複数のモデルでmediaファイルアップされるってのは想定されてないところ見ると普通じゃないのかな
486 :
482 :2010/06/04(金) 06:54:54 ID:???
ありがとうございます。プラグイン調べて見たいと思います。
cakeにプラグインがあるなんて知らなかった。 情報thx!!
>>485 >複数のモデルでmediaファイルアップされるってのは想定されてないところ見ると普通じゃないのかな
Attachement モデルで group とかで指定できるでしょ。
これができるから、mediapluginってつえーんだよね。
>>488 それはそうなんだけど
サイズ指定ね。
モデルによって必要なサムネイルサイズが違うって普通にあることだと思うんだけど、
サイズ指定はConfigure::write()のMedia.filter.imageでAppで共通の設定でしょ
ビヘイビアの引数とか、Attachmentモデルとからへんで指定できてよさそうなのにってはなし
490 :
nobodyさん :2010/06/05(土) 09:45:21 ID:xxd6/1g9
CAKEPHPのチュートリアルとか見て勉強中なんですがECLIPSE
でデバッグできると知り、なんとか設定してみました。
が、CAKEで動かそうとするとデバッグできません。
最初の一行で止まるOPTIONでデバッグすると、CAKE内部で止まるのですが
sample_controller.phpとかの行でブレークポイントをつけても無視されてしまいます。
デバッグの構成は
XDebug、Default PHP Server使用で
ファイルは /cakephp/samples
URLは
http://Localhost/cakephp/samples としています。
なにが原因でしょうか? わかるかた教えてください
入門書でも買って一から勉強したら?
CakePHP1.3.1のキャッシュ関係のバグが直ってるぽい あと質問時にあげなくても良いからね。って見てないからあげるんだろうが
IDださなきゃ騙りが出るだろーが IDだせ
495 :
nobodyさん :2010/06/07(月) 10:12:48 ID:nY/RardB
告知させて。 現在のところあまり盛んに動いてるオンライン勉強会がないので あたらしくグループつくりました。 オンラインでチャット・生中などいろいろ(未定)で できれば毎晩だらだら勉強やる予定です。 熱意のある人いたらたまーに課題だしてってアプリ作るなんてのも ありかなと思ってます。 初心者の人はもちろん、おれが仕切って教えてやるわって人も大歓迎です。
496 :
nobodyさん :2010/06/07(月) 10:13:55 ID:nY/RardB
平日やんの?
cakeなんて勉強会するほどのものじゃないだろ
あちこちのスレで宣伝してるしPHPの勉強会ということだろう まぁそんなボランティア精神あふれる社会人はいないけどな 学生か初心者同士が教えあう趣旨ならいいかもしれんが 狭いコミュがいやだから2chにいるわけでわざわざ登録してまでここからいくやつはいるのだろうか・・・ 引き抜くならmixiとか教えてgooとかからのほうがいいぞ
あcakeじゃなくてphpか 学びたいなら2chなんかから一歩外に出たほうがいっぱいあるだろうに なぜあえて2chとかつけたがるのか甚だ疑問だ
501 :
nobodyさん :2010/06/07(月) 11:17:18 ID:nY/RardB
>>497 平日というか、とりあえず毎日でもチャットかスカイプとかで何人か雑談的に
あーだ、こーだ最近のネタとかPHPについて話す場を作って、たまーに課題でアプリでも作って
やってければなってかんじです。
マジメに教えるための素材作ってオフの勉強会みたいにやるのは、たぶんこれまでの
グループとかみても運営に負担かかって衰退するだけなんで気楽にやれればなーってかんじです。
>>498-500 なんとなくやってみるかんじだよー。
mixiとかも考えてみる。
>>494 変なのが、きちゃったじゃないかよ。。。
503 :
495 :2010/06/07(月) 14:10:32 ID:???
* * * + うそです n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
504 :
nobodyさん :2010/06/07(月) 17:51:30 ID:BTwl7tPr
1.3系の次は2.0になるみたいだね
>>505 そだよ。
ちなみに2.0はPHP5のみ
すっきりする
今まで4が切られていなかったのが奇跡 つーか、PHP4+CakePHPのプロジェクトなんて、片手で数えられるくらいしかないんじゃないか?
1.3.0入れてBlogのチュートリアルやったんだけど、 記事個別のviewやdeleteのリンクの最後が"/id:1"のようになってしまっていて、動きません "id:"が余計で"/1"に変えてみたら動くのですが、こうなるのはソースのどこが間違っているのでしょうか? 公式が堂々と間違えているのにぐぐっても特に何も出ない
>>509 1.3英語版のマニュアルの方を見ると良いです。
'id'=> が余計だね。
>>510 日本語版はテキスト古いとか出てたので英語版見ながらやったんですが…
もいちどチェックしてみます
どうやら1.3じゃない版を見ていたっぽい ctp内の'id'=>を消したらいけました
1.2以上でセキュリティコンポーネントのrequireAuthを使えてる人いる?
>>506 どーせなら5.3のみにしてもらってもいいくらいだな。
5でもそれぞれ地味に挙動違うし
hasOneとbelongToて何が違うの? 機能的には同じものを提供しているように思うんですが
>>515 バカだな
ニートなお前は
親に依存してるだろ?→belongsTo
でも逆に親から見ると
親はお前を養ってるだろ?→hasOne
お前兄弟いる?いるなら
親はお前(ら)を養ってるだろ?→hasMany
>>515 ちがうよ!全然違うよ!
User hasOne Profile だけど、 User belongsTo Country になる。
この場合、Country hasMany User が成り立つ。(別に設定する必要はないが)
相手側から見てhasManyが成り立てばbelongsToだよ
なぜ使い分けるかは、それぞれ提供されてる機能が違ってくるから。
慣れるまでは
>>518 を参考に区別しておくと良いよ
520 :
nobodyさん :2010/06/11(金) 09:02:47 ID:iUDx5l1B
>>520 これ一番わかりやすい本だと思うんだけど絶版なんだよね
全ページを見せてくれてもいいのになあ
data[0][aaa] data[0][bbb] data[0][ccc] data[1][aaa] data[2][bbb] data[3][ccc] のような配列のバリデーションって出来ますか?
CakePHP: the rapid development php framework Not Found Error: The requested address '/' was not found on this server. でハマっています。 Configure::write('debug', 0); を0以外にするとエラーにならなくなります。 どこから調べていけばいいでしょうか…。
routes.phpとかテンプレートあるかどうかとか。
>>524 ん?debug 1だとエラーが出ないってこと?
そしたら、layoutsファイル内にecho $content_for_layoutが無いとか?
debug時になにかしらエラーが出てると思うんだけど
cakeインスコで聞きたいんですけど(1.3入れました。) mod_rewriteが効いてない?みたいで cakeのディレクトリにあるindex.phpが404で開きません。 apacheのhttpd.confと cakeの3つの.htaccessのRewriteBaseも解説本通り修正したんですが ほかに何か問題になりそうなところってありますか?
529 :
528 :2010/06/12(土) 21:40:47 ID:???
自己解決しました。 .htaccessのRewriteBase外したらおkでした。
共有SSLを使おうと思ったら、
https://レンタルサーバ/ドメイン名/ と、
サブディレクトリがくっついてきて、そのままだとCakePHPの吐き出す絶対パスが
合わなくなってしまいます。
mod_rewriteのrewritebaseで設定すればいけると思いますが、ホスト名によって
rewritebaseを複数設定することは可能でしょうか?
cake/libs/session.php を改造したいんですが、 直接ファイルに手を入れずに別の場所において修正する事は可能でしょうか ヘルパーを改造したいときに cake/libs/view/helpers/*.php を app/views/helpers/ に 置くのと同じイメージでできればと思ってるんですが
views以下のテンプレートにctpじゃなくてPEARのHTML_Template_Sigmaを使いたいんですが そういう改造を施した例とかどこかにないでしょうか HTMLとPHPをなるべく分離したいのです よろしくお願いします
534 :
nobodyさん :2010/06/17(木) 14:22:14 ID:bowe+bRa
>>531 できるんじゃない?
>>532 app/session.phpにコピーすれば、そっちが優先して動くんじゃない?
>>533 Smarty使う方法はたくさん解説されてるから、それを参考にすればよいんでない?
直訳:ググレカス
1.3.2のPagenatorで、$pagenator->counter(array('format' => '%count%件')); とかやって表示件すとか色々出力しているのだけど Notice (8): Undefined index: limit [CORE/cake/libs/view/helpers/paginator.php, line 543] Notice (8): Undefined index: limit [CORE/cake/libs/view/helpers/paginator.php, line 545] ってエラーがでる。 controller側で $this->paginate = array( 'fields' => 'hoge', 'conditions' => array(...), 'limit' => 10, 'order' => 'id asc', ); $this->paginate('model'); って、limitの指定をしているのになぜ?
そのエラーの原因を追えないとか終わってるだろ もうやめとけ
わかったlimitが無いんだ!
そういう理不尽なエラーはしょうもないスペルミスだったりすることが多いな。
疲れてるとハマるんだよな
データが来ない。おかしい!ってさんざんモデルだの何だのひっくり返してみて conditionsがconditonsだったのを発見した時の脱力感・・・
あるあるw
そういうのってEclipseとかが教えてくれないの?
スペルチェックオンにすれば教えてくれそう
だからCakeはエラー発生箇所が異次元なんだよ。 Strutsの黎明期そっくりだ。
>>545 他のFW使ったことないけど
PHP系FWのマニュアル見てるとどれも辞書で設定してるし
どっこいな気がする
ページの先頭にどうしても空行が入ってしまうのですが、 回避する方法はあるのでしょうか? dispatche.phpのechoしている部分の前に、 「ob_clean();」を追加しても解消しませんでした。
>>547 回避すること考えるより、どうやって該当箇所を発見するかを考えたほうが遙かに前向きだと思うんだが
>>547 ソースを全部さらしたら、探してあげてもいい
>>547 どうせどっかのコードの最後の?>の後に改行が入っているのだと思われる
551 :
nobodyさん :2010/06/19(土) 04:33:18 ID:iks7bUVl
1.2なんですけど viewとかcontrollerとかで、その場でHelper使いたいとき App::import('Helper', 'Form');とか例えばやったとして new Formして $form->input();とか使うと、 Undefined property: FormHelper::$Html って怒られます。 自動で FormHelperクラスの $helpersを読み込むのをやってくれないんだと思うんですけど どうにかして正常に動作させられないですかね? 調べると英語で同様の症状を訴える投稿はありますけど明確な回答が見つからんです。
Undefined property: FormHelper::$Html そのまんまなのだがw HTMLヘルパーも読み込んでみれ
formヘルパーでラジオボタンとかセレクトボックスを生成したときに、 「デフォではxを選択した状態だけど、バリデーションエラー時とかにはユーザーが選択した状態」 にするにはどうしたらいいの? optionでselected設定しちゃうと、バリデーションエラー時にその設定が優先されちゃって ユーザーの選択じゃなくなっちゃうんだけども
$form->うんちゃら('hoge',array('value' => $value)); で普通にいけない? ユーザからのデータがない場合は、$valueに初期値を設定するようにして、 ユーザからのデー座がある場合は、それを上書きして view に渡す。
>>556 >ユーザからのデータがない場合は、$valueに初期値を設定するようにして、
やっぱりそれしかないのかな
フォームヘルパー自体でそういう機能を備えてくれてるといいんだけど、
コントローラー側で一手間かかるのを、出来れば省略したい
>>557 つ array('default' => 'x')
あんまり使ったことないけどね
初期値与えるならcontroller(model)のほうがいいと思うなあ
>>558 まさにそれ!ありがとう!
確かにモデルと関連させてデフォを決める場合には、ヘルパーで決めちゃわない方がいいかもしれないけど、
とりあえずこれで行くわ
>>559 あ、最後のはひとりごとだから気にしないで
あと、データが0のときは、デフォルトの値に上書きされるかも。要注意
1.3から$this->set(compact('foo_bar'))したときにキャメルケースに強制変換されなくなった?
このスレレベルたけぇな
>>562 それ皮肉だってことが分からない人がいるから、はっきり言ってあげた方がいいよ
皮肉なんか言ってやるなよ かわいそうだろ
まあこのような、わけのわからんこと言い出す連中が 一番低脳だというのは言うまでもない話。
page以外のnamedパラメータを使ってpaginationすると、URLの最初にpage:xが来てしまいます 例えば /status:active/page:2 にアクセスすると nextのリンクは /page:3/status:active になる といった感じです コードを追ってみたところ、pagination helperの中でnamedパラメーターを配列として扱って、 array_margeを何度か行っている関係で、pageが配列の一番最初に来てしまって、結果、 URLの一番最初のnamedパラメーターとして表示されてしまっているようです pagination helper自体をいじって、最終的にpageを配列の一番最後に持ってくれば 正しく動きそうですが、他にもう少しスマートな方法はないでしょうか・・・
568 :
567 :2010/06/19(土) 22:20:31 ID:???
一応、pagination helperの362行目に if(isset($url['page'])) { $page = $url['page']; unset($url['page']); $url = array_merge($url, array('page'=>$page)); } を追加したら、page:xが一番最後に来るのを確認できました
569 :
551 :2010/06/19(土) 23:15:37 ID:iks7bUVl
>>552 そりゃわかるんですけど
そもそも読み込まれないのがなんとかならないかという話です。
App::import('Helper', 'Form');
App::import('Helper', 'Html');
$form = FormHelper;
$form->Html = HtmlHelper;
ここまでやればHtmlがないとは怒られないですが、$form->webrootがセットされていなかったりと、
そもそもApp::import('Helper' が用意されているのにも関わらず、
ちゃんと使える状態にならないってのもおかしいのではないかと思い質問させていただきました。
>>569 controllerで同じ亊してsetで渡しなよ
>亊
http://xxxx/ (アプリ名)/test.php
で、適切なデバッグレベルの場合はテストが実行されますが、これを無効にする方法はありますか?
本番リリース時などでデバッグレベルを0にした場合、テスト自体は行われませんが
「Debug setting does not allow access to this url.」
などというメッセージが出てきます。
こういう場合はwebroot直下のtest.phpを削除するのが正しいですか??
>>572 htaccess に404でリダイレクト知るように書けば
validationって、使うコントローラーによって切り替えたりとかできないですかね?
ビューの中でfunctionを作って、 その中でヘルパーを使いたいときは 引数で渡す以外にどうすれば上手くできるでしょうか
Authで会員ログイン機能を実装して例えば写真を見せるサイトを作ったとして、 退会すると当然Authによりはじかれてログインはできないけど、 写真に直接アクセスされたとき、はじかれませんよね? 写真一枚表示するのにCakeのコア動かしてAuthログイン判断してってのは負荷が心配だし なにかいい方法ないですかね? ファイル名をランダムにしててもメモされたら意味ない でもメモする位ならファイル保存しない?じゃあよくね??みたいな永久ループしてます。
まぁほんとに見せたくないならauthかますしかないわな コストと実利を天秤にかけろ
580 :
nobodyさん :2010/06/23(水) 12:39:45 ID:hpuIM/fT
DBのクエリ実行自体は 20ms ぐらいなのに、HTMLの出力に1〜5秒ほどかかってしまう場合 どこが原因かチェックする方法ってありますか? Controller自体は、find() を2回使って、出力するHTML自体も20Kb程度です。
クライアントのCPUが弱い
>>580 DebugKitつかってる?どこで何ミリ秒かかってるかとか詳細がみれるよ
独自のグローバル関数を追加する方法は cake\basics.phpに追加する以外に 何か方法はありますか?
ヘルパー化する
>>583 app/config/bootstrap.php
1.3を使っています。 Authコンポーネントを使い基本的なログイン機能を作っていたのですが core.phpを書き換えてセッションをDB管理したら ログイン出来なくなりました。 エラーメッセージも出ず、auth.phpを上から見ていってるのですが どこでつまづいてるのかわかりません。 セッションをDB管理し、authを使うには何か設定が必要でしょうか
cakePHPにはDB接続をサポートする機能が搭載されていますが、 それを使わずmysql_connectやpear::DBを使ってDB接続することはありますか?
>>582 ありがとうございます。DebugKit導入しました。
これで少しは原因が分かりそうです。
一部を除いた全ソースから?>を削除した こんなもんいらね
あぁ?>いらないんだよね ていうか開発者から、取るのを推奨されているんだっけ? 何のためかは良く知らないけど 改行が入ったりの予防くらい?
俺は?>は書かないし、viewで極力セミコロンを付けない でも最初からあるコードは基本的に放置だな むしろ手を加えることで何か不具合出してしまいそう
>>592 >viewで極力セミコロンを付けない
<? echo $hoge ?>
こういうこと?
>>593 うん、<?php echo $hoge ?>だけど
どうでもいいよ
まぁプログラムって運だからな
は?書いたようにしか動かないよ 何いってんの?
>596 ちげぇよ愛だよ
>586 coreに記述されているハッシュの種が変わったから、 違うパスワードが生成されているんじゃないの? 照会SQLを確認してみな。
まるでIEのHTML勝手解釈だな。 そのうちPHPの仕様が変わって絶滅するだろうな。 ガハハハハハハハハ
601 :
nobodyさん :2010/06/24(木) 23:45:45 ID:SNEZsqXV
<?php e(date(__('F j,Y'),$times)); ?> とcakePHPによる実践アプリケーション開発 という本に 例があり一部抜粋したのですが、この先頭のeとは何なんでしょうか?
debugが1以上だと、HTMLの最後に<!-- 0.00sec -->みたいな出力にかかる秒数書いてあるけど Ajaxで使うときはエラーになって邪魔です。Ajaxで使うときは出力しないようにできませんか?
>>603 beforeRenderとかで
if ($this->RequestHandler->isAjax()) Configure::write('debug',0);
って感じ
>599 照会SQL確認して、 セッションテーブルのIDをintにしていたのが間違っていました ばーちゃーにしたらうまく動きました。 ありがとうございます!
606 :
603 :2010/06/25(金) 10:24:39 ID:???
>>604 なるほど!RequestHandlerがあったんですね。ありがとうございます。
607 :
nobodyさん :2010/06/25(金) 18:49:37 ID:0V5oobxv
>602 ありがとうございました。
普通RequestHandlerを使うとLayoutがajaxになると思うが、みんなはajax.ctp使ってないの
なにがだ
CakePHPって新規開発にしか使えないよね。
何を期待してるんだ? 何ができれば”既存案件で使える”になるんだ?
session管理ってcookie使ってますか? 情報の引き渡しにsessionを多用してたら、複数のブラウザを立ち上げて 並行してオペレーションを行うと動作がおかしくなりました。 同じsessionを複数のオペレーションから参照してるので当たり前といえば 当たり前なのですが。 こんな場合はURIにsession idを含めるとか、そういう対処が一番ですかね?
何を期待してて でもどうなった だからおかしいと思ってる ってのが分らなけりゃ答えようがないと思わないかい? はいかいいえで答えてくれ
いいえ
615 :
612 :2010/06/28(月) 11:56:53 ID:???
>>613 はい、その通りです。例をあげると
http://sample.sakushima.net/Cake/sessions/ ブラウザを2つ立ち上げて、このページをそれぞれ開きます。
2つのブラウザを順番にリロードすると、リロードした順に1,2,…と回数が上がります。
2つのブラウザで同じSessionを共有しているので、この動作は正しいと思います。
やりたいことは、上記の動作を行った際、2つのブラウザそれぞれで1,2,…と回数を上げたいのです。
実現方法ご存じの方お教えください。
>>615 認証済みのユーザーということじゃないんだよね?
そうすると、2つのブラウザのアクセスが同一人物だと判定しなきゃいけない
URLに埋め込むとセッションハイジャックされるリスクを負うんじゃまいか?
User.id User.name Diary.id Diary.user_id Diary.body Comment.id Comment.diary_id Comment.body というDB構成で作っているときに、 「最新のコメント10件がが誰の日記に向けて書かれたか」を表示させるとき、 $this->Comment->findで、recursiveを2にしてデータを取ってきてるんだけど、 CommentとDiaryがJOINされるんだけど、それとは別にUserのデータを 取ってくるのに10回もSQLを投げてしまうのはしょうがないものなの? CakePHPが副問い合わせに対応していないせい? 表示させたいのは >最新のコメント10件 > こんにちは → Aさんの日記 > お久しぶりです → Bさんの日記 > 面白いですね → Aさんの日記 > ... という感じなんだけど
619 :
nobodyさん :2010/06/28(月) 19:53:05 ID:qHDwmPz9
VIEWのCTPファイル内で、TABLEの幅を400pxに固定したいんですが。 <TABLE width="400px"> として表にしてもブラウザの幅に あわせて伸び縮みしてしまいます。 デフォルトのCSSファイルより、優先されると思うのですが何故でしょうか? CSKEPHPはver1.2です。
<TABLE width="400"> htmlはpxいらねーよ てか悪いことは言わん。この業界あきらめろお前は
仕事とは限らないとおもた
622 :
nobodyさん :2010/06/28(月) 20:27:47 ID:qHDwmPz9
>620 なるほど、うまくいきました。 ありがとうございました。
仕事だろうと趣味だろうとなんでもいいやめろ HTML/CSS/PHP/CakePHPこれらを切り分けもできずに こんなところで糞な質問しちゃう奴なんざやめろ今すぐ。
まあスレ違いではあるね 今後は気をつけるだろう
こええよw
みんな、メモリはどれくらい使っているのか知りたい。 1セッション当たり、10MBくらいは普通かな?
>623 優しい奴だな。ちょっともえ
HTMLで悩むならまずとほほを読んで来い。 あそこは世紀を超えての名サイトだ。
〉〉623 これをリアルで言われて 言われたヤツやめちゃって やめたヤツの仕事が俺に回ってきて 言ったヤツ知らん顔 俺涙目
630 :
612 :2010/06/29(火) 12:04:06 ID:???
>>615 結局やりたいことというのは
「同時にブラウザを複数立ち上げたときに、それぞれ別々に状態を保持しておきたい」
ということです。極端な話、ブラウザ1・ブラウザ2でそれぞれユーザー1・ユーザー2
で認証をしたら、それぞれのユーザーで独立して動作するイメージです。
実際に作っているアプリでは、認証情報・画面遷移情報・入力データなど、結構な量の
データを画面間で保持する必要があります。実現方法として考えているのは下記です。
1.URLにSession IDを埋め込み、それを基にServer側で使うべきSessionを切り替える
→携帯サイト向けのサンプルは見つかった。いまいち良いサンプルが見つからない
2.引き継ぐ情報をまとめてシリアライズ・暗号化してURL・POSTで渡す(極力Sessionは使わない)
→通信データサイズが結構な量になるかも・・・
こうしたほうが良い等ご意見ありましたらお教えください。。
>>630 ん?
>>616 だけど完全に逆だと思ってた。
っていうか、違うブラウザなら、別のセッションだと認識されるのが普通だが、どんな環境でチェックしてるの?
FFとChromeでやってみたが、ふつうにそれぞれ独立してインクリメントされるよ??
632 :
612 :2010/06/29(火) 12:47:04 ID:???
633 :
612 :2010/06/29(火) 12:55:56 ID:???
>>632 補足で、ブラウザ1・2ともに同じ種類のブラウザです。
もしかしたら616さん、ブラウザ1:FF・ブラウザ2:Chormeとか、
別のブラウザを立ち上げてるんじゃないかと。
クライアント側でUAを変えるなどの小細工が許されないのなら、 サーバ側で何らかの識別データをGET/POSTで埋め込むのしか思いつかない。。
>>633 うん。そうだよ。別のブラウザでやった。
同じブラウザのタブ別で別ユーザーだと認識させたいの?
そりゃまた無茶なことを、、、
なにがしたいのかわかりません。
Macで開発中にwebkitを使ってプレビューするソフト(codaとかCSSEditとか)を同時に使うと セッションが切れちゃって確かに鬱陶しいけど、まあ開発中の一時的なもんだしなあ。
CakePHPって新規案件でしか使えないよね。
俺なんて5年くらい前に作ったデータ管理がファイルベースのシステムをcakeに移行中だ データをmysqlに移行する以外は意外とめんどくさくない
modelを新しく作るたびに、毎回データベースにテーブルを作らないといけないのでしょうか? Fatなコントローラーをmodelに集約しようと思い、 新しく scrape というモデルを作って、動かしてました。 ローカルでは普通に上手く行くのですが、 いざWEB上で動かすと、 Database table scrapes for model Scrape was not found. というエラーメッセージが。。
>>641 データベース 使わない model cakephp
でググるんだ
あほっぽいのの相手はしたくないけど modelで var $useTable = false; だったかをするとテーブルなくても怒られないけど?
書く前にリロードすればよかった すまそ
>>645 一応チュートリアルにもあるが、Cakeで始めにはまる落とし穴。
あと
>>643 とか使えないヤツだから気にするな。
paginate()をカスタマイズしたいのですが、ソートが機能しなくて困っています。 モデルAのpaginate()の中で SELECT * FROM a, b, c WHERE a.b_id = b.id AND b.c_id = c.id; という形のSQLを発行しているのですが、 <th><?php echo $paginator->sort('c.name');?></th> のリンクをクリックしてもソートされないのです。 モデルAとCはリレーションがないため、 paginate()の$order引数に 'c.name' => 'asc' が入ってこないようです。 どうすればいいでしょうか?
チューとリアルとかマニュアルに書いてあることを人に質問するとか終わってるだろ 二度と来るな
ionCube PHP Encoder等のソース暗号化ツールを適用させて cakeを動かした例はあるでしょうか。 同業者からの依頼でcakeを使う予定なんですが、再利用される恐れがあるため なんとかできたらと考えてます。
>>649 ionCube Japan アシアル株式会社に電話して聞けばいいじゃん。
ただの商品じゃないんだし。
\app\views\layoutsの中にベースデザインが入ってるctpファイルがあるんだけど そのファイルのソース中にリンク、例えばhote.htmlがあると出力したときに hoge.html?CAKEPHP=681a529c456e8da3f6a2e39219c8f4ca と言う文字列が必ず付くのですがこれはどうすれば消せますか? と言うか何のためにリンクに文字列が付いて出力されてるんでしょうか?
>>652 それセッションIDだろ
session.use_trans_sid = 0にするか、セッション使わない設定にしたら?
>>649 アプリの挙動が変わることもあるみたいだね。
655 :
647 :2010/07/01(木) 22:49:41 ID:???
$this->A->bindModel(array('belongsTo' => array('B', 'C'))); で動的に関連をセットすることでできました。
MediaPluginでvideoファイル扱ってる人いる? ffmpegもインストールしてやってるんだけど 初期から入ってるvideoのサムネイル設定なのに Medium::make - Invalid instruction `VideoMedium::fitCrop()`. とかなって死ぬ なんか設定が足りないのかサポートされてないのか というかMediaPluginと動画の話題が全然ぐぐってもヒットしないんだけどみんな使わないのかな
ありゃ??でけた 一応書いておくと filterの指定を↓見たいにしてたんだけど array('fitCrop'=>array(100, 100), 'convert'=>'image/jpeg') するとvideoのClassをよむからメソッドがなくて怒られる まさかとは思ったけど順番変えて最初にconvertおくと array('convert'=>'image/jpeg', 'fitCrop'=>array(100, 100)) ちゃんと変換してくれました。 スレ汚しすまんです。
みんな動画扱わないのかな ついでに汚します。寝たかったのにはまって一応解決?したんで wmvをアップして画像とかflvとかに変換したかったけどできない。 mpgならできたのに・・・ってなって四苦八苦 で、MediaPluginのソースいじることになるんだけど vendors/......../ffmpeg_video.php で最初に定義されてるrequire['mimeTypes']の mswmv ってのを ms-wmv に変更したら動いた。 同じ階層にあるgetid3_video.phpでも同じように定義されてあるんだけど、 そこではms-wmvになってるんだよね。揃えてみたら動きました。 なんかよくわからんが一応解決です。
最近CakePHPを学習しはじめた者です。 PHP自体は理解しており、MVCも理解しているつもりです。 とりあえず学習の定番と言えそうな本家(日本語)のチュートリアルをやってみました。 でもこれだけでは、その後独力でCakePHPの学習を推進していくチカラが得られませんでした。 チュートリアルのつぎのステップとしてお勧めな学習方法を教えてください。 (マニュアルを理解するには、チュートリだけでは知識が浅すぎると感じました) よろしくおねがいします。
>>659 何かアプリ作りましょう
実践して、詰まって、解決策を自分で見つけてるうちに使えるようになるよ
テストプロジェクトとかじゃなしに、 実際の開発プロジェクトで、みんなadmin routingとか使う?
>>660 チュートリアルをやれば、あとは独力ということですね。
でも、チュートリアルを一通りやっただけで、独力で解決策を見出しながら開発を
進めていくチカラが付いたとは思えないんですけど・・・
CakePHPは習得が簡単だと思っていましたけど、実はかなり敷居が高いのでは
ないかと思ってしまいます。
>>662 それ、そもそもPHPの習得を一通りこなせていないのでは?
>662 何でひっかかってるんだい? チュートリアル+入門書だけでスタートアップは十分だと思うけどな・・・
作成したテキストなどのファイルを一時的に保存しておくには app/tmp/ の中に適当なディレクトリを作って保存する方法で構わないんでしょうか。 他に適切な配置場所があれば教えていただきたいです。
1.3の$js->linkなりで、updateの複数指定って出来なくなりましたよね? 代替の書き方ってあるんでしょうか?
>>659 cakeの実践アプリケーションの本でも買ったら?
あとはcakeの開発陣の人たちはgitとかで他人のコードを読みまくるのが大切と言ってたと思う
>>665 app/tmp/の中は基本的に消えちゃってもかまわないキャッシュファイルとかの置き場なので
作成したテキスト(がどんなものなのか知らないけど)がそういうたぐいのデータならそこでいいと思う
誰か
>>618 答えてくれー・・・
>>659 PHPのサンプル本とかで「○○の作り方」ってのを一個一個おさらいしていったらいい
それができれば、あとはcakeの中でそれらをくっつけていくだけでしょ
>>662 チュートリアルをそのまま殆ど写しただけで「終わりました」とか言ってないか?
そりゃ身に付いてるはずがない。
コピペすれば動くんだから、エラーの時の問題解決なんか出来るようになるわけないわな。
1から作るのがまだ辛いなら、チュートリアルアプリをなにか改造してみれ。
画面を増やすとか、レコード(テーブル)にカラム追加するとか、入力チェック追加するとか。
CakePHPは独力での学習コストは高いよ。 マニュアルがうんこだから。 非公式のチュートリアルもロクなもんがないしな。
object思考なにそれ?なおれが習得できたんだからそうでもないと思うけどな
CakePHPは独力での学習コストが高いと思うのは、 お前にとってCakePHPがはじめて使うフレームワークだからだろ。
よし学習コストが高いフレームワークを教えろ早く
.netはコスト高いぜ
struts
フレームワークが初めての人向けのチュートリアル と、 フレームワークを既に知っている人向けのチュートリアル があると、普及が促進されるかもね。
前にも誰か言ってたけど バッドノウハウ的なもんがちょっと多いかなとは思う
>>674 .netはコスト低いだろ。
といってもmsの掌で踊るようなコードを書いてる限りだが。
チュートリアルと、実際に作るアプリの間に大きなギャップがあるのは確かだな。
チュートリアルを終えて、実際のアプリを作っていくうえで
「ここはどうやるんだろう」ということを何回も調べなければならない。
ま、どんなフレームワークでもそうだが、Cakeはチュートリアルが薄すぎる。
>>662 が言っているのもそういうことだろう。
680 :
nobodyさん :2010/07/04(日) 23:39:54 ID:6la4DkIe
チュートリアルが薄いっつーのもあるけど 実際に開発通じての経験から言うと フレームワークの設計の難に由来してる問題点も少なくないなと思った よく知られてる大きなプロジェクトとかが 他のへ移行してしまうのは やっぱそういった事も関係してるだろうなと思ったよ
CakePHPさわって、他のMVCフレームワークさわってみれば良いんじゃないの? 遠回りかもだけど、それぞれの似ているようで違う仕組みだから、より理解しやすいかも。 そして、CakePHP以外に合うものが見つかるかも。
俺ちゃんとつかったのはCakeが初めてなんだけど、他のFWに比べてCakeの良い点って何でしょう? Javaの何かと比べると、覚える事が意外と少ないな、という印象なんですが・・・
単純なCRUDアプリを作る上では、これ以上手順は減らせないだろうというくらいに 簡単な手順で作れるよね。 手を入れようとすると大変だけど。
でもWebに情報量多いよね ぐぐればたいてい解決してる
1.3で、Shellからviewのレンダリングを使うにはどうすればいいんですか? レンダリングしたものを、ファイル出力するシェルプログラムを組みたいのですが…。
=3が絵文字みたいでかわいい
お前のほうがかわいい
:=3
ヘルパーで出力するものをXHTMLじゃなくてHTMLにできない?
なにいってんのこのバカ↑
>>692 nl2brで言う、is_xhtmlみたいなオプションないの?って意味
このスレ専門的な単語が飛び交ってレベルたけぇわ
>>694 説明不足ですまん、ソース追ったけど見つけられなかったんだ
継承して書き換えもいいけど、末尾の3文字削って>付け足すわ
postgresでgetLastInsertIDを使う場面で、 複数タスクが走っている場合に 別のタスクのidを取得しちゃう可能性がある。っていう記述を 見つけてしまったんですが、 対処方法はどういったやりかたが考えられますか?
何それ 糞だな
その見つけた情報ソースを教えろ
getLastInsertID でググったらでてきました
だからどこだよ?
なんかギスギスしてるな
どこだどこだと聞いといて後はシカトかw
「CakePHPによるwebアプリケーション開発」 p..64で本のように表示できなくなりました。どなたかp62-64の 誤りを教えてください。スクリプトは付属CDのをそのままコピーしている のですが・・・
p.60 p.58-60の誤りです。hello/sendformのページが表示されるところ sendform画表示されてエラーになってしまいます>__<
>p..64で本のように表示できなくなりました。 どう表示されているかぐらい書こうや
>>704 質問の仕方を教えてやってるだろうが。
706もそうだが、聞きたいならどの情報に対して、何をしたらどういう状況になってるかくらい書け。
答えられるかは別問題だ。
Missing Controller
error: SendFormContoroller could nat be found.
です
http://localhost/cake/sample/hello/sendForm?text1=なんたら (UTFコンバートされた文字列)
というURLが表示されるところ
hello/
が欠けたURLが表示されてエラーになるのです。
index.ctp
で<form method="get" action="/sendform">
と送っているのですが、hello_contorollerのfunctionで sendformが定義されているのですが、
sendform_controllerがないとエラーがでています。・・・・
<form method="get" action="/sendform"> でした。解説はこのコードを前提に修正していく記述なので止まってます。
頭をお借りして申し訳ないです。何がおかしいのかまだ初歩なのでわからないです。・・・
×<form method="get" action="/sendform"> ○<form method="get" action="/sendform">
途中で書き込んでしまった。 すまん ×<form method="get" action="/sendform"> ○<form method="get" action="./sendform"> /sendformの前にドットを入れてみる。
>>709 action="/hello/sendfom" でどう?
○<form method="get" action="./sendForm"> です。たびたび申し訳ないです。 これをaction="./hello/sendForm"> にしてもだめなのです・・・
action="/hello/sendForm"> どっとなし。 これでもだめ??
>>715 勝手にふたつのレスを合わせるな
.sendForm
or
/hello/sendForm
でどうかと
>>713 と
>>714 でそれぞれ言われている
そして、その場合、アクション名は sendForm() なんだろうね?
あ、またかぶったw
だめです同じエラーがでてしまいます。なぜURLが省略されてしまうのでしょうか?
>>717 の前者はスラッシュ抜けてた ./sendForm
アクション名というか HelloControllerで定義しているfunctionは index()と sendForm() です。
>>719 debug( $this->webroot );
で、きちんとwebrootまでのパスがでるかい?
debug( $this->webroot ); をどんなファイル名にしてどこで表示させればいいのでしょうか?
>>723 どこでも良いけど index() の中とか
だめだこりゃ こんなのほっとけ
indexのなかだとそのまま debug( $this->webroot ); と表示されてしまいます>__<
>>726 うまくいかないなら「cakephp debug」でぐぐって、まず指示されたことが何かを理解しようとしなきゃ
PHPすらわかってないアホにどうしろと ほっとけって
>>708 >>697 の質問でソースの出所が必要とは思わないがな
んな堂々と「答えられるかは別問題だ」とか言われてもw
書籍で思い出したけどCakePHP 1.3によるWebアプリケーション開発って本が出てた
731 :
nobodyさん :2010/07/06(火) 19:45:35 ID:lebgmiXf
ビュー側でSTARTボタンにより、データをPOSTしてコントローラ側で受け取り ビュー側でのタスクのインターバルを変更したいのですが この場合、$_POST('a')で受け渡せるのですが、もっとスマートに渡せる方法は あるでしょうか? また、コントローラのアクション内で、変数を使用すると動作はするもののUndefined・・・ 未定義警告が出てしまいます。そもそも変数はどの場所でどのように、定義したら いいのでしょうか? アクション内で、$_POST('a')を使用して未定義警告をださないにはどうしたらいいですか?
>>730 秀和のcake本の1.3対応版か
前回のはレビュー良かったけど、すぐ売り切れだか絶版になってて実物見たこと無いわ
今日本屋でその本みてきた なかなか丁寧な解説でよさげ
1.3の$session->flash()にechoが必要で小一時間ハマった。
736 :
nobodyさん :2010/07/07(水) 20:45:57 ID:6d/8d4Je
>731 未定義警告ですが仕方ないので、issetで判定して処理して消しました。
CakePHPって新規開発にしか使えないよね。 何故なら改修の場合は大抵DBにまで手は入れないから。
何故ならはいいが理由になってなくね? まあ改修案件でわざわざCakePHP使うとこはないだろうが。
てか何回コピペするつもりか知らんが FW使ってないシステムに後からFW突っ込むことなんて Cakeに限らずできないと思うが
単なる改修案件を、うまく丸め込んでリプレイスに持ち込めばこっちのもんよ
動きゃ何でもいいんだよ
742 :
nobodyさん :2010/07/08(木) 01:27:22 ID:jw2HbYMj
表示が重い(遅い)のって仕様ですかね? 1.3.2をダウンロードしまして、coreの設定だけを変えて Viewに「Hello World」と表示する簡単なページを出力させたのですが、 読み込みに2,3秒かかります。 ローカルのWindowsXP・PHP5.2.5上でテストしているのですが、 何か早く処理させる方法ってあるのでしょうか?
お客様の中にエスパーはいらっしゃいませんか?
俺の念動力はどうやら出番無しのようだな
あるよ ローカル以外で実行
746 :
nobodyさん :2010/07/08(木) 02:27:04 ID:jw2HbYMj
う〜ん、一般的に外部サーバよりもローカルの方が速いと思うのですが。 ネットワークの問題じゃなくて、Cakeの問題だと思うんです。 あと、最低限の開発環境とやった事を記載しているので、 エスパーじゃないと答えられないという事もない気が・・・
>>742 普通は単純なページ表示に2,3秒もかからん
ボトルネックはどこなのか自分で特定するんだ
ローカルの方が遅いよ
WindowsXP・PHP5.2.5 全然足りないだろ CPU、バストサイズ、メモリくらいまでは書け
751 :
nobodyさん :2010/07/08(木) 02:56:36 ID:jw2HbYMj
>>748 ですよね・・。
本当にファイル解凍してcore.phpのSecurity.salt変更して
単純なページ表示しただけなんです。
自作のフレームワークやPEARでこういう事がなかったので
CakePHPの問題だと思っています。
とりあえず、良くある問題じゃないみたいなので、自分で解決します。
>>749 ネットに繋げる必要ないのにですか?それは信じがたいですね。
752 :
nobodyさん :2010/07/08(木) 02:58:34 ID:jw2HbYMj
>>750 CPUやCore 2DUOで2GBのローカルサーバです。
というか、サーバスペックが数年前だとしても
Hello Woldという1行テキスト表示だけで、2,3秒はあり得ないと思うんですよね・・。
ネタ扱いされているという事は、皆さんの環境ではそうでもないと言う事かな。
てか普通にそんな遅かったとして そこらで使われるわけねーだろ
なんども読み込んでもその秒数? とりあえずDebugKit入れてどこで時間食ってるか計測してみな あとConfigure::writeのdebugを0にしてやってみると速くなったかも おれの開発環境WinXP+Xamppでも2〜3秒は普通にあるよ。 HelloWorldはさすがにそんなにかからないと思うけど。
755 :
nobodyさん :2010/07/08(木) 03:09:56 ID:jw2HbYMj
>>754 わかりました。
あと、さくらのサーバに入れたら違和感なく表示されました。
ですので、サーバの問題だと思います。
CakePHPの問題じゃないと言う事は、自分が間違っていました。すみませんでした。
xamppで実行すると断然遅いのはお約束
だからローカルだと遅いといったろが!このやろう!!
Linux上だと普通
だからCakeが遅いんじゃないっていったろがこのやろー
Windowsで開発すなw
モデルのテストケース書くときって、バリデーションのテストケースまで書いてる? バリデーションの組み合わせをテストするだけで結構な量のテストになるのだけど どこまでテストするべきか、それともバリデーションのテストは不要か悩む
session関連で、ブラウザがchromeの時だけ発生している現象で困っています。 $data['1']['1'] = 'A'; $data['1']['2'] = 'B'; $data['2']['1'] = 'A'; $data['3']['2'] = 'B'; といった配列を $this->Session->write('data',$data); で保存し、 次のページで $data = $this->Session->read('data'); とやったあとで$dataを確認すると、 $data['1']['1'] = 'A'; $data['1']['2'] = 'B'; だけになっているのです。 $data['2']['1'] = 'A'; $data['3']['2'] = 'B'; がロストしています。 chromeでセッションIDの受け渡しにクッキーを使っているときだけ発生します。 IEでは問題ありません。 セッションIDをURL埋め込みにすると、問題なく動作するようです。 でも可能な限り埋め込みは使いたくないのです。 何かご存じの方、ご意見いただきたいです。 よろしくおねがいします。
>763 どういう条件で抜け落ちるのかわららん $data['1']['3'] = 'C'; とか $data['1']['3'] = 'A'; を追加してみるとか $data['1']['1'] = 'A'; $data['1']['2'] = 'B'; $data['2']['1'] = 'C'; $data['3']['2'] = 'D'; だとどうなのかとか
条件がさっぱりわからんのです。 おっしゃるような追加もいろいろやってみたのですが 法則がつかめません。
今気がついたのですが、 セッションを保存しているファイルを監視していまして、 sess_**** というファイルが IEの場合は、二つ作られるのに対して、 chromeだと三つ作られています。 その三つ目のセッションファイルの中身がすでにデータ抜け落ちているようで、 そちらを優先してreadしているみたいです。 二つ目だとデータが保持されています。
外部ファイル読み込んでるけど、そのファイルがないからCakeが起動してて、そこでセッション発行してるとか そんな感じの何かを感じた
なるほど、外部ファイルですか。 ソースを確認してみます。
>>739 トンチンカンなこと言ってるなよ。
改修案件・リプレイス案件で使えないようなFWなんて
使い物にならんね。
>>769 CAKEがつかえねーと思うなら他にもいっぱい良いフレームワークがあるのだから、そっちに行けばいい
だよな 少なくともRailsとかCakeみたいに規約で縛るタイプのフレームワークは 既存のシステムに合わせるのは向いてないんだから それに向いてるフレームワークを使えばいいだけだ
あえて釣られてみるが・・・ >改修案件・リプレイス案件で使えない なぜそう思う?
DB構成が特殊な案件なんだろ 命名規則が面倒とか
俺みたいな優柔不断の場合、 Cakeのようにガチガチに縛った仕様の方が 使いやすい時がある。
いま、そういう話ししてるんじゃないよね?
だよね
亀甲縛りに見えて発情したじゃねーか
ガチムチだろそれ言うなら
よくフレームワーク使う理由に「他人もわかるようにするため」 みたいな理由聞くけど、フレームワークだからって簡単に分かるか? やっぱり、個々の作り方に依存すると思うんだよな。
だよね。
Cakeは配列だらけなのがうざい 完全OOPでCake並に使いやすいFWがほしいな
>>779 依存するような作り方はしないように努めるもんだ
何使っても自分のことしか考えられなければ同じこと
Akelosまじオススメ!Cakeのような出来損ないのFWとは違うぜ?
>>782 それはそうなんだが、そう言いだしたらどの書き方でも一緒だよな?
それこそ自作フレームワークでも、コメントちゃんと書いてれば。
>>784 自作でも国際的に主流になってる書き方を心がければ同じだろうな
そうした仕組みを共有しやすくしているのがFrameWorkだろ
ほう Akelos ぱっと見はCakeに似ているようだが もうちょっと調べてみる
よくある主流になれなかったFWだね。 FWは中身でなく、普及率が鍵。
よさそうだけど普及率いまいちだね 開発スピードも遅いみたいだし ただ、Cakeの配列だけはどうにかならんのか Cake2まだー?
Lithiumは?
1.2から1.3を躊躇してるんだけど移ったほうがいいかな? ここはスルーしてCake2なりリチウムなり待ったほうがいいかな? みんなどんな感じなの?
>>790 俺なら1.3もイジるし、リチウムもいじる。
自分で触んなきゃ何もわからんから。
2chは参考程度じゃね。
Yiiとかはどう? 設置しやすそうだし、現状ではよさげなんだが
移行するって簡単なようで難しいよな。 俺も自作FWからCake1.3に移行しているけど、 手癖がある分、以降が困難だ。 しかも、自分で作ったコードを誰かと共有して使うかって言ったら その可能性はかなり低いだろうし。自作でもいい気がしてくる
Cake2は配列残るべ?
残るけどfindの戻り値はオブジェクトになるとか
Yiiは予約語少ないのがいいね ただ流行るかは未知数 個人的には流行って欲しい CakePHPは便利ちゃあ便利なんだが CMS界のWPのような存在になったらそれはそれで困る
>>795 中途半端にオブジェクトにされてもな
引数について言及されてないってことは、引数は配列のままなんでしょ?
>>797 >CMS界のWPのような存在になったらそれはそれで困る
なぜに?
>>798 たぶん、そのままなんだろうねえ…
>>799 外見はいいけど中身が中途半端&時代遅れ
CMSはまだいいが、FWで中身が中途半端&時代遅れだとかえって使いにくい
CakePHPは予約語が多すぎたりでメソッド名ださくなるしな そうはいってもライブラリも多いから使ってるんだけどなw
yiiムズいな
確かにWordpressは時代後れだよな でも、使う側(プログラミングしない人)から見ると 動くし、プラグイン一杯あるから使うんだろうな
WordPressに変わる便利で流行るCMS公開したらいいよ
WPって時代遅れなのか? MTが時代遅れって言うのならわかるけど、CMSとしてはともかくブログシステムとしてWPは 最高峰だと思っていたんだが… そんな俺が時代遅れなんだろうか
Wordpressはいまや世界一のブログシステムだよ。 Movabletypeからかなりの人が乗り換えてる。 最新版は、複数のブログを単一のシステムで構築できるようになったから ますます普及するんじゃないかな。
言語と同じだよ 用途で使い分ければいいだけ
用途かぶってるだろ?
でも、ソースはとてもMVCとは言えなく無いか?
誰もMVCなんて言ってない気もするが
MVCって言葉を覚えたてなんだろうな
ごめん。フレームワークの事だった・・・ てか、MVC覚え立てならCakeのスレ来ないだろ
んじゃそれぞれのスレでやるってことで
>ごめん。フレームワークの事だった・・・ これでも意味わかめ
フレームワークって言葉を覚えたてなんだろうな
paginationのカスタムで挫折した・・・ モデルに関数作って上書きするってところまではわかるが、 独自SQLを反映させられない・・・難しすぎ
cakephpのpaginate使いにくいよな どうして $this->Model->paginate() って使い方にしなかったのか理解に苦しむ
818 :
名無しさん@そうだ選挙に行こう :2010/07/10(土) 16:37:18 ID:v/ICs0IK
書籍 CakePHPによる実践アプリケーション開発で勉強しています。 P82-84 バリデーションルールの追加で var $validate = array( 'from' => array( 'date_format' => array('rule' => array('datetime'), 'required' => true), 'compare_from_to'=> array('rule' => array('compareFromTo')), 'not_duplicate_schedule' => array('rule' => array('isDuplicate')) 中省略 function isDuplicate($value) { $from = $this->data[$this->name]['from']; $to = $this->data[$this->name]['to']; $conditions = array('or' => array( array("from BETWEEN ? AND ?" => array($from, $to)), array("to BETWEEN ? AND ?" => array($from, $to)) )); if($this->id) { $conditions[$this->alias . '.' . $this->primaryKey] = '!= '.$this->id; } $count = $this->find('count', compact('conditions')); return $count == 0; } この中の $conditions[$this->alias . '.' . $this->primaryKey] = '!= '.$this->id; で aliasとは何が入るのでしょう? 漠然と同レコードのIDを排除して比較してるような 気はしますが、$condtionsの2番目配列には何がはいるのでしょうか?
>>818 見た感じ$this->aliasはisDuplicateの呼び出し元のモデル名が入るんじゃね?
820 :
名無しさん@そうだ選挙に行こう :2010/07/10(土) 22:13:41 ID:oMY+XuqK
で、それとCakePHPとなんの関係があるの?
githubとかで参考になるプロジェクトってある? 1.2で。
みなさん、CakePHPを仕事で使ってるんですか?
そうですがなにか
羽田のサイトはcakePHPでできてるぞ
誰だよ
俺だよ俺
query() 使うとテーブル名がキーにセットされるじゃないですか。 テーブル名に別名(Hogeとか)付ければいいのだけど、From句にサブクエリを使った場合はこの別名すら読んでくれなくないですか?
829 :
nobodyさん :2010/07/13(火) 11:50:34 ID:mYlx8y+I
elements のなかで親ビューで設定した変数を使う方法を教えてください ループの中身をインクルードしたいです
マニュアルも読まないで人に聞くな チュートリアルもこなさないで人に聞くな アホばっかり
GROUP BYを指定するには、1 = 1 GROUP BY xxx って指定する以外に方法ありますか?
バージョンは? マニュアルに書いてあるっしょ optionsにarray(group=>*)
マニュアルで探すと時間かかるじゃん?
そうでもないよ ってか釣り堀はここじゃない
836 :
832 :2010/07/13(火) 14:13:28 ID:???
>>833 ありがとう。
あれ?もしかして、1.2以降はgroupが使えるようになっているのか…。
1.1で、使えなかったから標準ではサポートされていないのかと思いました。
すいません。
ここで聞く方が誰かが答えるまで時間がかかるし、そもそも答えが返ってこない可能性もあるのに
マニュアルは分かりづらいよ。 PHPのマニュアルほど、整理されてないし。
>>838 PHPのマニュアルほどって
無茶言うなw
findとかpaginationとかFormヘルパーとか 似たような物作って自家製フレームワーク作ってるんだけどやたら難しい。 CakePHPからWebサイトに必要な機能を省いた 軽量版が欲しかったんだが、素直にCakePHP使った方が良いのかな・・・
CakePHPが重くて困る場面でなきゃ 既存のものを使わない理由はないな
既存のはpaninationの使い方がどうも難しいんだよな・・・。 あと、配列書きまくらないと設定できないというのも。 重くて困るという事はないが、xdebugした時のログを見ると 無駄な部分も多いんじゃないかなって思うんだよな。
オレオレフレームワークほど無駄なものはない
どうしてもなら自家製paginationとして ヘルパーやらコンポーネントやらを作ればいい。 オレオレフレームワークほど犬も喰わんものはない
オレオレフレームワークって言っても、俺が使うからなw バリデーションの処理(モデルとの連携)が難しいんだが ま、限界を感じたら845の言うようにするよ。
847 :
nobodyさん :2010/07/14(水) 00:26:44 ID:sCETZCgF
database.phpのデータベース接続情報を コントローラーから参照するのって、どうすればいいのでしょうか? staticじゃないから、DATABASE_CONFIG::$default では駄目ですし・・。
>>847 ConnectionManager::getDataSource($this->(モデル名)->useDbConfig)
じゃだめ??
849 :
nobodyさん :2010/07/14(水) 16:50:30 ID:sCETZCgF
>>848 駄目です・・。「Class 'ConnectionManager' not found」
というようにクラスがないと出ます。
ソースはTestControllerのindex内に
$config = ConnectionManager::getDataSource($this->Test->useDbConfig);
print_r($config);
としただけなんですが・・・。バージョンは1.3.2です。
クラス読みこめば?
851 :
nobodyさん :2010/07/14(水) 17:30:31 ID:sCETZCgF
$obj = new DATABASE_CONFIG(); $config = $obj->default; としたらいけました。この方法しかないんですかね?
スレチ失礼。ATNDより、PHP関連の勉強会を紹介します。
■Ktai Library for cakephp 勉強会@関東
URL:
http://atnd.org/events/6209 日時: 2010/07/17 11:00 to 15:00
場所: マイ・スペース&ビジネスブース池袋西武横店
参加条件: Masa-Pさんの本「PHPで作る携帯サイト デベロッパーズガイド」を持参、かつ4章までを自力である程度実装できている、もしくは出来る方
■OpenPNE3で学ぶsymfony勉強会
URL:
http://atnd.org/events/6255 日時: 2010/07/24 15:00 to 17:00
場所: 手嶋屋新宿御苑オフィス
内容: この勉強会は毎回OpenPNE3の各機能、仕様にフォーカスを当て、ベースフレームワークであるsymfonyを理解していく勉強会です。
参加者はみんなsymfonyに興味のあるプログラマです。Webエンジニアとのネットワークづくりにもお役立てください。
■Python4PHPer 第7回講習会
URL:
http://atnd.org/events/6344 日時: 2010/08/12 10:00 to 22:00
場所: 国立オリンピック記念青少年総合センター
内容: Python未経験者向けの、PythonとGoogle App Engine (GAE) の入門講座です。
■第11回 LOCAL PHP部勉強会
URL:
http://atnd.org/events/6443 日時: 2010/08/28 14:00 to 16:30
場所: 札幌市産業振興センター セミナールーム9
おいしね↑
生きる!
原西来てるな
856 :
nobodyさん :2010/07/16(金) 11:44:19 ID:iQAofRLh
コントローラー側でページネーションを操作する方法って無いでしょうか? $paginator->counterやソートの内容をコントローラーで処理して setでビューに渡せるようにしたいと思っています。 コントローラーで「$helpers = array('Paginator');」としても $paginatorの内容が取得できませんでした。
>>856 操作ってどんなの?
普通にpaginator使っていればコントローラ側で意識しなくても渡るけど。
もしくは、paginatorを継承して付け加えれば?
858 :
nobodyさん :2010/07/16(金) 13:43:53 ID:iQAofRLh
>>857 例えば「次へのリンクがある場合」という条件を書く時、
if ($paginator->last() != "") {
echo $paginator->next('次へ');
}
という感じのソースになりますが、
このIFの部分を含めてコントローラーで変数に置きかえ、ビューに渡したいんです。
shell上でコンポーネントを使うにはどうすればいいでしょうか?
使い方はたぶんこれでOKなのを見つけたんですが App::import('Component','コンポーネント'); $this->コンポーネント = new コンポーネントComponent(); こんなエラーがでちゃいます PHP Fatal error: Class 'App' not found Appが無いって事でしょうか ちなみに上記コンポーネントを使おうとしなければエラーはでません cake1.2です
エラーのまんまだけどAppがまだ読まれてないところで使ってるんじゃない? どこにそれ書いたの
ところでCakePHPって新規の案件以外では使えないよね。
デジャブやめろw
そんなネタはおもしろくない
面白いとか面白くないとかじゃなくて 事実を突きつけてる。OK?
じゃ、事実として意見を言うけど、確かに使いづらいよ。 特にMVCに分かれていない更新案件なら、手間がかかるだけ。 でも、それ(新規案件だけで使う)が何か問題あるのか?
まぁCakePHP使いこなせてないだけだろうね(笑)
いや、そうじゃなくて、更新案件なら 今まで作っていた作り方があるのに わざわざCakePHPを使う必要があるのか?ってこと。 お前は、自分が管理しやすいからって 一から作り直すのをクライアントに勧めるのか?
最終的に何を言いたいのかわからんけど フレームワークってそういうもんだろ PEARとか拾ってきたクラスとかってのは既存のシステムからそれを利用するコードを書くわけだけど フレームワークって逆にフレームワークから呼び出されるコードを書くのがデベロッパの仕事なわけで 当然フレームワークに沿った描き方する必要があるに決まってる
何回ループするんだよw
最近だけで3回くらいデジャブな感じ
cakephpでsymfonyにあたるsfFormのsetNameFormatってどうやったらいいの?
>>869 だから新規の案件意外で使えなくても不思議じゃないのに、
わざわざ聞くなってこと。言わせんな恥ずかしい。
VB.netが出たときも、結局書き直しじゃねぇかって話が出てた さすがWeb界のVB
>>874 横だけど、2ちゃんで誤字突っ込むやつ久々に見た
男で突っ込まれるのが好きな奴なんているのか
878 :
nobodyさん :2010/07/18(日) 22:09:37 ID:4SBJVnBL
商品テーブル(items)と在庫テーブル(stocks)というのがあって、 商品テーブルにデータが追加されたら、在庫テーブルに商品IDが入る と言う仕組みを作っているのですが、 ItemモデルでhasOneで結合するだけでは追加されません。 Itemコントローラーで$this->Item->saveAllした後に $this->Stock->saveAllをするというように、分けないと登録出来ないのでしょうか?
RoRも込みでの話しになるけど 新規でしか使えないフレームワークなんて何の意味があるのかね? RoR系のフレームワークってDBのテーブル名やPKは必ずIDにしなくちゃいけないとか 規約があるんだろ? そんなもの使っかえねーし、きめぇ事この上無いんだが なんでお前らこんな糞みたいなの使ってんの?
そうじゃないフレームワークはどれ? フレームワークを理解してる?
>なんでお前らこんな糞みたいなの使ってんの? 使っている人が多いから それ以上の理由ってあるか?
primaryKeyもtable名も変えれるけどね。 規約に沿ってないなら指定すればいいだけ。
>878 CookBook3.7.4あたりをもう一度読み直してみて
884 :
878 :2010/07/19(月) 01:48:08 ID:???
>>883 読み直しました。
やはり、一旦saveしてそこからgetLastInsertIdで追加したIDを取得して
もう一度saveするやり方しかないみたいですね。
考えたら、素のDB処理もそうするし、同じ事ですね。勉強になりました。
糞って言いたいだけだろ
Cookbookすらまともに読んでないようなやつは できないということにしといてもいいんじゃね?w とりあえず、できるしCookbookにもろに書いてるがな
次の患者どうぞ
>>879 新規案件だからだろ
他のがいいときは他の奴つかうし
フレームワークに振り回されてんじゃねーよ
>>884 そんなことない
適切なデータを渡せばsaveAllでいける
>>884 ちゃんとモデルごとに分けて配列に入れてからsaveAllしてる?
そもそもちゃんとモデルが関連づけされてる?取り出すときは一緒に出てくる?
怪しいところはその辺かなあ
CakePHP 1.3.3 rainbow icing edition released
893 :
878 :2010/07/19(月) 13:44:01 ID:???
>>890 884で書いた事って、891のURLで書いている事と同じ事ではないでしょうか?
891のURLでも分けてsaveしてますよね。
ちゃんとモデル毎に分けて配列に入れてますし、
paginateする時も一緒に読み込んでますよ。
すげーなお前
MediaPluginの使い方が難しすぎる・・・ 素直に適当なコンポーネント作成してアップロードさせた方が良いな
>>882 知ってるよ。
でも設定より規約を重視するフレームワークでは
推奨される行為ではないんだろ?
DBにも制約があるなんて屑加減にも程がある。
フレームワークをなんだと思ってるんだろうか
主流のFWの規約=その時代の標準的なコーディング規約 と思っても良いと思うぞ。 それから大きく離れているコードを書く人は、おれおれFWを作りやすい人なんだろうな。
規約を守らないで使うぐらいだったら、オレオレライブラリとかpearとか使ってやった方が その後は幸せになれるとおもうよ。規約があるから楽になるんだから。
複数人で開発する場合は規約があったほうがいい。
おまえら釣られすぎww
>規約があるから楽になるんだから。 これ、ほんとそうだな。 俺みたいに優柔不断で仕様作るのに時間かかる人間からしたら 規約が決まっている方が作りやすい。
907 :
nobodyさん :2010/07/20(火) 00:03:25 ID:Al1F2MMr
cookbookの投稿記事の編集を見たのですが、
http://book.cakephp.org/ja/view/340/Editing-Posts function edit($id = null) {
$this->Post->id = $id;
と言うふうに書かれていますけど、関数の$idって
どこから参照されるのでしょうか?
URLが /(コントローラー名)/edit/id:10
であれば、edit関数内で$id=10として代入されるかと思ったのですが、
代入されていませんでした。
/edit/10
909 :
907 :2010/07/20(火) 01:14:21 ID:???
>>908 出来ました。URLの意味が
/コントローラー名/アクション/ID
だったんですね。id:10とかパラメーターが付いたら直で渡せないと。
その場合は、$this->params["named"]で取るようにします。
なにがしたいのかしらんがよくわからない方向に向かおうとしてる気がする
DBの命名に縛りが出ることにすげー違和感を覚えるんだが。 君達はそんなことないのか? 「楽だから」という理由だけでそれに納得してるのか。 単純な脳みそしてんだなー。
まあそこのページ、英語と日本語でちょっと違ってて 英語版を試すとおかしなことになるんだよね。 1.3用の英語ページが一番正しい。はず。
>>911 使ったことあればわかると思うけど別に縛りなんて無いよ。ただ初期値があるだけだ。
好きな名前使えばいい。
サッカーはどうして手を使ったらダメなんだ?って考える人ってめんどくさいだろ? ボール蹴って「そういうもんだ」と思って楽しんだほうが楽なのと一緒だ。
ここ数日CakePHPを使えないものとしたくてたまらない奴が一匹いるようだな
Smartyスレに来るやつと同一人物だな
つうか、使わなきゃいいんだってw 規約に合わせたくない、合わせるのが諸処の事情で難しい、 そういう現場にまで押しつけようとは CakePHPコミュニティも、俺らもしてないじゃないの
たぶん、会社の上司かクライアントか誰かに言われたんでしょ。 「フレームワーク勉強しろ」って。 そんで、必死に勉強しない理由探して叩いてるだけでしょ。
>>911 DB名を規則通りにすると1〜2行程度、楽ができるとかレベルだから
好きにつければいいよ。一通り、規約によるメリットを調べてから
従うもの、無視するもの選べばいいよ。
そんなに日本語カラム名が使いたいのか
サニタイズって使う? HTML許可するフォーム以外、使い道が思い浮かばない。
データを表示するときに使う
ビューキャッシュってapp/tmp/cache/view/にひたすら置かれていくけど、 キャッシュ数が多くなったときのためにディレクトリで管理とかできないの?
何万ファイルにもなるとOSに負荷がかかるとかなんとかかんとか
少なくともviewの数以上増えないんでしょ??
ん、そうなんだ。 あんま気にしたことなかったな。 ただディレクトリ見ても延々増えてるようには見えない。
929 :
923 :2010/07/21(水) 12:17:22 ID:???
>>924 デフォでは用意されてないのかねぇ・・・
>>926 ,
>>928 たとえば1万ユーザーいるSNSでいろいろキャッシュしたら
ユーザーホームのページ分1万ファイル作られるし、さらに日記
ページとかとかキャッシュしたら、天井知らずに増える。
3万ファイルくらいまでは普通にキャッシュ増えて行ってしまって、
こりゃまずいと思って対策を考えているところなんだ。
なにがまずい?
使ったことないけど他のキャッシュシステムだと上限設定できるのか? もしそうなら切り替えれば?
>>930 キャッシュもデータファイルだから、鯖の容量食うからまずいって話だろ?
>>930 ひとつのディレクトリに概ね1万以上のファイルはファイルシステムの動作が遅くなる
>>929 ディレクトリで分けるのが正攻法じゃね?
934 :
nobodyさん :2010/07/21(水) 12:51:29 ID:ULlFclUd
古いファイル消せ
キャッシュのエンジンはクラスになってるんだから FileEngineからでも派生させてオレオレエンジンクラスをつくればいいと思うよ。 それよりログインした後のユーザー領域をキャッシュにするのは大丈夫なのかな。 俺はなんか不安だからやってないんだけど、ユーザーIDをキーにするとかでいいんだろうか?
936 :
923 :2010/07/21(水) 14:15:22 ID:???
説明不足ですみません
アクセスはまんべんなくくるので、キャッシュを減らすわけにもいかず、
キャッシュファイルの数はどうしても万単位になってしまうのです
http://soudan1.biglobe.ne.jp/qa4019431.html この辺によると、やはり同一ディレクトリには10k〜15kくらいのファイル数に
納めることが理想のようです
自分の場合は容量は特に問題ないので、ディレクトリで分けようと思っています。
cakeでは
app/tmp/cache/view/test_read.cgi_php_1268874059.php
という感じのファイルが生成されますが、これを
app/tmp/cache/view/test/read.cgi/php/1268874059.php
みたいな感じで生成する方法はデフォルトで用意されているのでしょうか?
>>935 ずっと前だけど、そのときはURL叩いたらログインして無くても表示された
でも今ならcake:nocache使えばいけるかも?
>>936 用意されてない
最後の数字がユニークなら末尾2桁とって 59 というディレクトリに書き出すようにすると100分の1になるよ
939 :
923 :2010/07/21(水) 14:28:11 ID:???
>>938 用意されていないのですね・・・
自前で仕組みを作ってみることにします。
>>939 あ、でも任意のディレクトリを指定できたかも?
調べてみて
941 :
923 :2010/07/21(水) 14:36:20 ID:???
>>940 保存場所を任意のディレクトリにはできるようです
キャッシュ保存前に保存場所を切り替えてディレクトリに分けて保存するという
やり方もありそうですが、結局読み出しの時にそのディレクトリを指定してあげなきゃ
いけないので、どちらにせよその辺は自前で用意しなきゃいけませんね・・・
942 :
935 :2010/07/21(水) 14:36:36 ID:???
あちょっと違ってた。 ビューのキャッシュのファイル名など決めてんのはキャッシュヘルパーの仕事すね。
943 :
935 :2010/07/21(水) 14:52:27 ID:???
>>937 そんなこともあったんだ。
俺が不安に思ってたのは、キャッシュのファイル名はurlをInflector::slugにかけて作ってるから
下手すると、違うページなのに同一ファイル名のキャッシュができてしまう可能性があること。
1.3のInflector::slugはちょっと良くなったみたいだけど、どうなんだろ。
>>943 URLごとにキャッシュファイル作成するからそれはない
Inflector::slugの件は、PCREライブラリの設定で、回避可能(確認したのはv1.3.0)
ビュー内で、そのビューが格納されている フォルダ名(コントローラー名の頭文字を小文字にしたやつ) を簡単に取得するにはどうしたらいいでしょうか $this->name で名前がとれましたが、頭文字が大文字の ため、毎度変換しないといけないので、もっと簡単にとれれば と思った次第です
みなさん、Cakeに移行するまでに使っていたclassや関数ってどうしてます? コンポーネントやヘルパーを作って完全にCakeに移行します? Cake用に書き換えるとCake以外で使う時、使えなくなるなって思い どこまで移植するか悩みます。
ベンダーにいれろよ
ベンダーですか・・。DB接続あるし、どうしようか悩むんですよね。
迷ってる暇があるなら、 さっさとcakePHP用に移行したほうが幸せになれると思うけど。 cakePHPのファンクションを使用しなければ、 他のフレームワークに移行したところで影響は少ないと思う。
DB接続をハードコーディングしてあるクラス カラスもつつかないごみじゃない?
>>950 さっきから小一時間やっていたのですが、
ようやく1つの関数を移行できました・・。
いくらやってもデータが追加できなかったのですが、
素のSQL文って INSERT INTO table_name ('name') VALUES ('aaa')
でもインサートされて、IDはオートインクリメントで連番が付けられますが、
Cakeの場合は、IDフィールドを指定しないと追加されません。
$values["Test"] = array(
'id' =>'', // これが必要
'name'=>$name
)
こういうCake特有の仕様が物凄く面倒なんですよね・・・
え?
これがPHP脳ですか?
本当にゴミ以下のソースで藁
そんな無駄な資産捨てちまえってww
おまえらにも親の肩身のタオルケットくらいあるだろうが!
いちいち変数に値が存在するか否かissetで調べないと Undefined variableエラーが出るんだけど、 issetで調べない方法はゴミソースで良いの?
>>958 getデータはrouting使うと、issetやらis_numericやらは省略できる
emptyで
>>958 お前は何を言ってるんだ?
それがCakePHPの所為だとおもってるんなら今すぐやめたほうがいい
array地獄をやめてclassに移行してほしい。 生成した側は構造が分かっているはずだけど、 依存するのは避けたいから利用側で確認しないわけにはいかない。
formヘルパーのtimeで 24時間以降を、午前1時=25:00 というふうに30時くらいまで追加する方法ってないでしょうか
継承して数値ずらせばいいだけ
人生以外ないだろ
CakePHPは人生
968 :
nobodyさん :2010/07/22(木) 14:36:53 ID:+voqy8bn
AというコントローラーでモデルをA・Bと指定してるとします。 findの場合、$this->B->find でBのモデルに対するデータを取得できますが、 これをページネーションでするにはどうすればいいのでしょうか? $this->B->paginate()では駄目でした
$this->B->paginate(’B’) でいけました。スレ汚しすみません。。
解決はや!
@推奨すんなw あとcakePHPとは関係がない。よそでやれ
DBのカウンタのフィールドを+1したい(SQL で書くと counter + 1 )のだけど cakePHPのモデルだとどう書くのですか?
>>973 インクリメントビヘイビアというのがある
それをそのまま使うか、それを参考に
>>974 Thanx!!
検索用語が難しくて全然探せなかったので助かりました。
$this->Article->doIncrement($id, 1, 'votes');
Increment Behavior (Articles) | The Bakery, Everything CakePHP
http://bakery.cakephp.org/articles/view/increment-behavior 検索用: フィールド +1 カウンター SQL field +1 counter
と思ってソースみたら、結局findByIdしたものを +1 しているからSQLは2回
投げる気がする。それだったら意味ないっぽい。
上記リンクのコメントのリンク先にあるやり方の方が良さそうかな。
$content->updateAll(array(‘num_of_purchases’ => ‘num_of_purchases+1′)
または、これかな。 app_model.php function UpdateHits($id) { //debug ($this->useTable);exit; $FieldToInc = 'views'; $this->execute("UPDATE $this->useTable SET $FieldToInc=$FieldToInc+1 WHERE id=$id"); }
単純にSQL文で書けば UPDATE table_name SET count=count+1 なのに、やけにめんどくさいよね。仕様だから仕方ないけど
そう思ったらquery()つかえばよろし
まぁ、そこら辺はCakeは遠回りするからね。 シンプルなものなら直書きでも良いんじゃないか。
>>977 それは排他制御が・・
Cakeのは大丈夫なのか、といわれると知らんが。
saveしようとして $dat = array('id'=>null,'txt'=>'AAA') を table->save($dat) としたら、 クエリの内容が INSERT INTO "table" ("id", "txt") VALUES (NULL,'AAA') となってしまって、 idはnullじゃ駄目なんだよ。とエラーが返ってきます。 通常idがnullだと、クエリからidは外してくれるんですが 何故かidが外れません 何か原因で考えられる事はあるでしょうか
ならidの辞書型自体を指定しなけりゃいいんじゃね?
確かにそうなのですが、 これまではidを指定していても自動で外してくれていたんです。 特定の場所だけで発生しています
これまでって何だよ
エスパー召喚魔法唱えてるんだろ。 人間に方は放置しておk
いっそソース一式全部晒してくれれば バグを見つけてくれる人もいるだろう
どうでもいいけどチュートリアルくらいはこなしてから人に聞いてるんだろうな
モデル周りのマニュアルちゃんと読めばなんてこと無いことを苦労してる気がする。
>>980 この場合の排他制御ってどういう意味?
MySQLならUPDATEしていれば問題ないよね?
incrementの方は排他制御的に問題あると思うけど
そもそも+1したいってなんなの? システム変更でデータ移行するから一気に+1したいのか 取り出した値を常に+1したいのか あーめんどくせーどうでもいいや ここ最近の質問って全部同一人物だろ ぐだぐだいってないでCakeやろうと思ったなら オフィシャルやらチュートリアルやらAPIのドキュメントやら読めよ 嫌なら何も始めるな
>>991 同一人物じゃないが
UPDATE table_name SET count=count+1 をしたい
>ぐだぐだいってないでCakeやろうと思ったなら
>オフィシャルやらチュートリアルやらAPIのドキュメントやら読めよ
どこに書いてあるの? どこにも書いてない、できないから上記の答えになっているんだろ?
日本語が理解できないならまず日本語を勉強してこいよ
UPDATE 〜 のSQL文書いたのは俺だけどなw てか、count+1する場面って結構あると思うけどな。 在庫管理にカウンターに投稿数の加算とか。 チュートリアル見て質問してるだろうけど、 翻訳が変だったり、不十分だったりするから人に聞くんでしょ。
>>992 ならそれをModel->query()で問題ないっていってんだろ
しつけーんだよアホか
「cakephp increment」で検索かけるとすぐに件のビヘイビア見つかって解決。
検索できるようになろうね。
それに対して
>>977 が
>単純にSQL文で書けば
>UPDATE table_name SET count=count+1
>
>なのに、やけにめんどくさいよね。仕様だから仕方ないけど
なんだけど、これ俺勘違いして質問者が言ってると思ってた
だからそう思うならquery()で書けばいいって書いたわけ。
次スレ立ててくるわ
>>994 バカか?
queryでできることには誰も反論してないだろ。誰がどこでそれに問題があるって言ったと思っているんだよ。
マニュアル等に書いてないのも事実だろ?
まず日本語の読解能力つけろよ
そんな話はしてなくて今は排他処理のことを聞いているんだよ。
逆ギレの現場を見た w
次いってみよー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。