【PHP】フレームワーク CakePHP 14ホール目【v2.1】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/05/01(火) 16:58:44.53ID:fVBzm1/ACakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい には無いかも
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
前スレ
【PHP】フレームワーク CakePHP 13ホール目【v2.0】
http://kohada.2ch.net/test/read.cgi/php/1320768310/
0730nobodyさん
2012/11/04(日) 21:38:37.79ID:eiB+7ElRそのうち、1)と2)で入力された値の組み合わせのチェックを
独自バリデーション内で行いたいのですが
どうすれば、独自バリデーションファンクション内でサブIDの値を
捕捉する事が出来ますか?
1)基本ID ( basic_id )
2)サブID ( sub_id )
public $validate = Array(
'basic_id' => Array(
'dokuzi' => array(
'rule' => array('isCorrectId', 'ダミーの引数'),
'message' => '独自バリデーションの結果エラーが出ました。。'
)
function isCorrectId($data, $dummy_args)
{
$basic_id = $data["basic_id"];
$sub_id = {サブID}; ← どうやって取得したらいいか分かりません。
return true;
//return false;
}
0731730
2012/11/04(日) 21:56:02.04ID:eiB+7ElRはまりまくってます。
0732nobodyさん
2012/11/04(日) 22:07:20.84ID:???バージョン不明なので2と仮定して、
定石的に Model に定義しているのを前提に。
Post されたデータなら
$this->data['Model']['basic_id']
$this->data['Model']['sub_id']
で参照出来ると思うけど、何でわざわざ関数に引数渡すの?
あと”ダミーの引数”って書き方だけだと配列で渡しているか不明なんだけど、
配列で渡してないから参照出来ないんじゃないのか?
0733nobodyさん
2012/11/04(日) 22:10:34.23ID:???数レス進んでいる中でスルーされているんならわかるが、
無レスで催促求めるんなら2ch向いてない、ヤフー知恵袋あたりに帰れ
0734730
2012/11/04(日) 23:39:10.86ID:eiB+7ElRありがとうございます。
次の様に項目毎に独自バリデーション関数を指定したところ
ファンクション内で var_dump($data); をしたら
画面上の入力項目(基本ID、サブID)の値も取得出来る様になりました。
public $validate = Array(
'basic_id' => Array(
'dokuzi' => array(
'rule' => array('isCorrectSequenceNumber'),
'message' => '独自バリデーションです。'
)
),
'sub_id' => Array(
'dokuzi' => array(
'rule' => array('isCorrectSequenceNumber'),
'message' => '独自バリデーションです。'
)
),
0735730
2012/11/04(日) 23:46:59.54ID:eiB+7ElRで、いけると思ったんですけど
結局バリデーションファンクションに値が入って来るのは
1項目毎なのですね。。。
基本ID と サブID の値を同時に絡めて独自判定処理を入れたいのですが
1つのファンクションじゃできないみたいです。
ちょっと回りくどいけど、外部ファイルにパラメータを保存して
よみとってやるしかないんでしょうか?
※cakePHP2 を使用しています。
0736730
2012/11/05(月) 00:05:07.80ID:Ag4y5/HLコントローラの中でモデルの中で定義した独自バリデーション
ファンクションを呼べばいいんですね。
すると data の中には画面上で入力された値全てを
取得する事が出来ました。
0737nobodyさん
2012/11/05(月) 00:43:14.75ID:???したらそもそもCakePHP使わずに他の Framework 使えば良いのに。
あと>>732で書いていることを全く理解してないのな。
isCorrectSequenceNumberの中身も書いてないし、そんなんで
アドバイス出来るのはエスパーだけだから知恵袋帰れ。
なんか>>713に通じる者がある。
0738nobodyさん
2012/11/05(月) 04:25:36.32ID:???0739nobodyさん
2012/11/05(月) 11:46:36.35ID:eArr6OfY↑
これはどーいう効果があるのさ^^?
0740nobodyさん
2012/11/05(月) 18:02:18.24ID:???0741nobodyさん
2012/11/05(月) 18:33:53.33ID:eArr6OfY臭いレスをありがとう
0742nobodyさん
2012/11/07(水) 11:03:27.13ID:???今まではifやswitchで分けて1つのコントローラ内で納めてたんだけど、
よく考えたら、コピーしてアクション分けした方が見やすいと思うようになった。
ただ、コントローラのソースが増えるからと言って
分けすぎるとスパゲティコード化するし、本末転倒な気がする。
みんなはどういう理念の元、開発してる?
0743nobodyさん
2012/11/07(水) 11:32:44.89ID:DVy9uKriCakeでテーブルのカラムのコメントを取得・更新する方法を教えてください
0744nobodyさん
2012/11/07(水) 13:21:38.42ID:???0745nobodyさん
2012/11/07(水) 13:40:48.60ID:???0746nobodyさん
2012/11/07(水) 14:08:49.06ID:???依存なんですか?
0747nobodyさん
2012/11/07(水) 17:42:47.92ID:???CakePHPベストプラクティスとかfatモデルとかでぐぐれ
まさに解決策が載ってる
ポイントは
ややこしい処理は全部モデルへ移せ
パラメータだけコントローラにおいて置けばいい
って感じ
0748nobodyさん
2012/11/07(水) 20:09:38.47ID:???0749nobodyさん
2012/11/07(水) 21:01:57.66ID:???モデルを小分けしてアクションの数だけ作ったらいいという話も聞いたが、
Modelディレクトリの直下に並列保存は正直きついな。
もう少しオートローダが強力だと独自に階層作れそうなんだけど。
0750nobodyさん
2012/11/07(水) 22:01:19.49ID:???階層たどって何がどう連携しているかわかりづらくなると思うよ
0751nobodyさん
2012/11/07(水) 23:02:38.91ID:???0752nobodyさん
2012/11/07(水) 23:11:41.84ID:???規模毎にみんなでコードレビューをしたい
0753nobodyさん
2012/11/07(水) 23:39:08.77ID:???どこで何してるか把握するのに時間がかかる
0754nobodyさん
2012/11/08(木) 02:24:42.59ID:???0755nobodyさん
2012/11/08(木) 16:45:25.90ID:???結果的には、modelキャッシュが利いていたのが原因だった。
本番サーバだから、debugレベルも0にしていたので気づくのが遅れたんだけど、
今後の運用に対して良い方法無いかな?
やっぱり、何かDBを操作したら手動でキャッシュ削除するしかないのだろうか
0756nobodyさん
2012/11/08(木) 20:03:29.72ID:???普通にModelのSave系やDeleteのメソッド使えば自動でキャッシュクリアしてくれるはず
そうでないなら自分で消すことになるよ
Modelのソース見てみると何やってるかわかるはず
http://api20.cakephp.org/view_source/model
0757nobodyさん
2012/11/10(土) 18:06:28.89ID:???0758nobodyさん
2012/11/10(土) 20:59:34.75ID:???0759nobodyさん
2012/11/10(土) 21:45:57.01ID:???ってか基本的なクラス・オブジェクトの概念がないとCake厳しいだろ
0760nobodyさん
2012/11/10(土) 22:17:58.60ID:???役に立たない。
cakeに限らずfwは効率を求めるために
純粋なオブジェクト指向から無理してるところがある。
0761nobodyさん
2012/11/10(土) 22:41:59.32ID:???幽霊を追いかけるのはやめろ
0762nobodyさん
2012/11/11(日) 03:32:21.94ID:???あまりオブジェクト指向の勉強・・・って感じにはならないけど、
ビヘイビアなんかを自分で作ってみると勉強になると思うよ
0763nobodyさん
2012/11/11(日) 12:27:53.87ID:???PHPのオブジェクト指向そのものは言語仕様の一つのオプションみたいなものだから、
オブジェクト指向を勉強の目的とするにはあまり向いてない。
Cakeとか開発してる連中なんかはPHPだけやってるわけじゃなくて、
いろんな引き出し持ってるからこそ実装できてる箇所も多いと思う。
プログラムの初心者で、オブジェクト指向そのものを勉強したいならJavaがいいんじゃないかな。
別にC#でもいいかもしれないけどいろいろ金がかかる。
Javaはその点書籍もたくさんあるし、無料の資料とかも十分以上あって申し分ない。
0764nobodyさん
2012/11/11(日) 17:01:18.82ID:???条件によって joinsでテーブルをLEFT JOINさせようと思っているのですが
joinsを入れてできたSQL文を見ると まずjoinsが入ってから、アソシエーションのLEFT JOINが書かれています。
自分の joinsを後ろに持ってくることはできないでしょうか?
0765764
2012/11/11(日) 17:37:42.08ID:???A belongsTo B
B belongsTo C
で、Aの条件と Cの条件でAのリストをとりたかったので A->findでどうにかしようとしてましたが
B->find でとってきた Aを使えばよかったようです
0766nobodyさん
2012/11/11(日) 17:59:06.36ID:63qzaIYV0768nobodyさん
2012/11/14(水) 16:10:58.98ID:???試してないが、コードを見る限り同じっぽいから直ってないんでない?
1の時ハマったからalphaNumericは自作を使ってる
0769nobodyさん
2012/11/16(金) 16:04:19.01ID:WLRp6A/S画面更新を伴わず、モデルで定義したバリデーションルールでバリデーションをかける方法を探しております。
jQueryで $("form").submit(function() {)
0770nobodyさん
2012/11/16(金) 16:06:53.33ID:???jQueryで $("form").submit()
でフォーム送信ボタンが押された時のアクションを拾ってあげて、
そこからフォーム全体をコントローラに渡し、バリデートを行いたいのですが、
「フォーム全体をコントローラに送る」をどう記述していいのかわかりません。
よろしくお願いします。
0771nobodyさん
2012/11/16(金) 16:17:17.30ID:???0772nobodyさん
2012/11/16(金) 16:34:43.12ID:???あと、submit押した時にajaxにデータ投げて結果を受け取って
エラーがある場合はsubmit止めるって処理になるわけだけど、
そう言う想定は出来てるの?出来てるならやっぱりCakeは関係ないよ
0773nobodyさん
2012/11/16(金) 16:53:16.45ID:???0774nobodyさん
2012/11/16(金) 17:17:56.02ID:???0775770
2012/11/16(金) 17:32:54.70ID:???一旦普通に動くフォームを作り上げております。
その際にモデルで定義したバリデーションを利用しているのですが、
普通のサブミットだと、一度画面の更新が発生してしまうじゃないですか。
その画面更新の際に、JavaScriptで生成しているアイテムがすべて消えてしまうのが難点なのです。
つまり、画面更新せずにモデルのバリデーションにフォームを食わせる方法を知りたいのです。
お願いします。
0776nobodyさん
2012/11/16(金) 18:12:19.09ID:???キーワードはこの辺りな
やはりcakeは関係ない
0778nobodyさん
2012/11/16(金) 21:55:17.37ID:???そのユーザー名は無効、とか5文字以上入れろ、とか
そんなんをリアルタイムで出したいってことなんじゃね?
0779nobodyさん
2012/11/16(金) 22:23:09.72ID:???0780nobodyさん
2012/11/16(金) 22:49:59.65ID:???”Cake上”で普通に動くフォームは作ってあります、
とかとんちんかんな返答してるんで、理解出来てないんでしょ。
メッセージ出すのはCakeのバリデーションじゃん、だからCakeで動くやり方教えてよ、
って考えなんだからCake抜きで一旦作れ、としか言いようがないよね。
なんかフォーラムもレベル低いのが集まってきてるし、初心者特集でもあったのか。。。
0781nobodyさん
2012/11/18(日) 00:55:57.75ID:???0782nobodyさん
2012/11/19(月) 16:18:32.93ID:???皆さんの「Cakeは関係ない」というご指摘の意味が良く分からないのです。
皆さんよりかなりレベルが低いかもしれません。
Cake上で画面更新を伴うフォーム送信は一旦完成させております。
モデルのバリデーションルールで誤入力に対して警告する仕組みも出来ております。
このモデルのバリデーションを実際のサブミットより前に行い、画面更新の前に警告だけを表示させたいのです。
これはAjaxを使ったCakeのモデルへのサブミットだと思うのですが、どうでしょうか?
Cakeは関係ないのでしょうか?
0783nobodyさん
2012/11/19(月) 17:12:28.84ID:???わかってるじゃねぇか。
だからAjax(jQuery)の方を勉強しろ、Cake関係ないって事だろが。
まずその知識はどうなんだ?それすら出来てないんだろ?
0784nobodyさん
2012/11/19(月) 17:16:36.02ID:???フォーム
↓
送信ボタンを押す
↓
ajaxで判定用のコントローラーにアクセス
↓
結果をjsonで返す→エラーがある時は表示
↓
エラーがない場合は確認画面へ
これをもう一度見直して、ajaxからcakeにアクセスし、結果をjsonで返して
それを判定するようなjavascriptコード書けよ。それだけだ。
0786nobodyさん
2012/11/19(月) 18:19:40.42ID:Ntxmf8gS0787nobodyさん
2012/11/19(月) 18:40:01.54ID:???0788nobodyさん
2012/11/19(月) 22:47:28.90ID:???ま、500円なんて割に合わないがw
0789nobodyさん
2012/11/19(月) 23:13:10.18ID:???0790nobodyさん
2012/11/19(月) 23:19:15.68ID:???ModelからもViewからも同じデータを参照できる仕組みが必要だと思うんだけど、
コントローラの仕事を増やさないで、一箇所にある同じデータを参照する場合、
ViewからModelを見に行くってことになるのかなと思うんだけど、おかしい?
0791nobodyさん
2012/11/19(月) 23:21:45.88ID:???具体的には、テーブルの内容を表示する際のラベルの設定を
どうするのかっていう問題とか。
0792nobodyさん
2012/11/19(月) 23:33:19.08ID:???Cakeみたいなフレームワークのビューって結局ただのテンプレートになってることが多くて
それは本来のMVCのビューじゃない
0793nobodyさん
2012/11/19(月) 23:35:10.21ID:???何にでも適用できる原則じゃないけど、そんなラベルの文字列なんかは
ビューに直接書きたくないならヘルパーにスクラッチしとけばいいんじゃないかな?
0795nobodyさん
2012/11/20(火) 00:39:35.43ID:???誰かもっと良いチュートリアルを作ってくれ(丸投げ
0796nobodyさん
2012/11/20(火) 08:42:01.29ID:ZgN4QSxZViewの中でModel使われると鬱陶しいんだよね
0797nobodyさん
2012/11/20(火) 11:14:41.40ID:???CSSやJavascriptを挿入するだけでも書かなくちゃいけないし
0798nobodyさん
2012/11/20(火) 11:53:01.37ID:???何か見やすいテンプレートエンジン使えばいいのに
0800nobodyさん
2012/11/20(火) 12:44:03.10ID:???ヘルパー作って、呼び出すだけにすればいいのに
0801nobodyさん
2012/11/20(火) 15:30:08.51ID:???中のループはヘルパー使ってもさ。
同様に、ifを使う箇所も出てくると思うよ。これもヘルパーじゃ無理だ
0802nobodyさん
2012/11/20(火) 15:38:31.06ID:???foreachもifも必要なくなる(というか使えない
0803nobodyさん
2012/11/20(火) 17:17:49.98ID:???普通にIfとかforeachとか使ってた気が・・・
今はどんなのがあるの?
0804nobodyさん
2012/11/20(火) 17:38:27.57ID:???この機に調べてみ
0805nobodyさん
2012/11/20(火) 17:55:21.76ID:???その弊害を語られることが少ない気がするが、
Modelとデータベースってのは本来別の次元の話なのに
両者が強力にくっついてしまっているのって結構問題だよな。
0806nobodyさん
2012/11/20(火) 20:35:24.50ID:???少なくともプログラム知識皆無の奴が使えるものじゃないだろ
0807nobodyさん
2012/11/21(水) 00:21:54.19ID:???だよね。
phpの書き方覚えるのとテンプレートの書き方覚えるのだったら、汎用的に使えて速いphpの書き方覚えた方が良いような
0808nobodyさん
2012/11/21(水) 00:27:56.23ID:???0809nobodyさん
2012/11/21(水) 00:59:56.41ID:???0810nobodyさん
2012/11/21(水) 01:04:16.32ID:???それならPHPも分かるよね?って思うんだが。Smartyとか。
0811nobodyさん
2012/11/21(水) 01:07:57.98ID:???同じだと思ってるの?
0812nobodyさん
2012/11/21(水) 01:08:59.64ID:???0813nobodyさん
2012/11/21(水) 01:12:19.26ID:???お前らって本当にSmartyしか知らないんだな
あれって全然デザイナにわかりやすくなってないじゃん
あれ基準に語るな
0814nobodyさん
2012/11/21(水) 01:37:17.56ID:???調べて見つかったのがお前が言ってるのと同じとも限らないんだし
0815nobodyさん
2012/11/21(水) 02:27:58.22ID:???0816nobodyさん
2012/11/21(水) 04:13:16.87ID:???土下座したら教えてやってもいいはw
0817nobodyさん
2012/11/21(水) 08:43:21.33ID:???お前は何を言ってるんだ?
PHPもSmartyもソース書くレベルとしては一緒だろ?って話で、
反対意見は、デザイナーから見たら全く別物のテンプレートあんだよ、探せ
って言ってるののどこに使いづらいとか読めてんの?
で、例って何?ソースレベルで提示しろって言ってんの?あほかw
0818nobodyさん
2012/11/21(水) 10:44:18.07ID:???Smarty以外で。お願いします。
0819nobodyさん
2012/11/21(水) 11:53:52.96ID:???はいはい。言い訳は良いからお前が良いと思うテンプレートエンジン書けよ。
どうせ何か言っても批判されると思ってるんだろ?お前みたいな奴からw
0821nobodyさん
2012/11/21(水) 13:51:31.70ID:qWxhErew良いこと言った!
0822nobodyさん
2012/11/21(水) 15:15:54.46ID:???頭悪いの?「自分がおすすめするテンプレートエンジン書けよ」ってだけだろ。
なぜか>>818は無視してるし。
0823nobodyさん
2012/11/21(水) 15:40:01.76ID:???制御構文なども皆無なのかな?
単に変数に値を流し込むだけ?
もうそんなデザイナークビにしていい時代だろ
0824nobodyさん
2012/11/21(水) 15:52:49.74ID:???>>802>>804>>808>>811>>813>>815>>816が同一人物のように見えた。
たぶん>>815はこっち(PHPもSmartyもデザイナーが扱うなら同じレベルと思ってる)側。
たぶん>>817もこっち側。
双方が相手を>>804側と思ってるから話がかみ合ってないんじゃないかな。
結論、お前ら安価省略するな。
で、>>804は>>819が図星でなんだかんだいって具体的なその他のテンプレートエンジンを
出せないだけだからこれ以上議論するのも無駄。
Cakeの話題に戻ろうぜ。
0825nobodyさん
2012/11/21(水) 16:17:33.37ID:???Smarty厨が出てきて騒いでた、内容は忘れたが
0826nobodyさん
2012/11/21(水) 16:24:06.37ID:???俺が見た感じ、
A派:
テンプレートエンジン=Smartyしか知らない、デザイナにもPHPの知識要求されると主張
B派:
テンプレートエンジンは他にもあって、ビューにPHPのコード書かなくても良くなると主張
この2派が喧嘩してるって事じゃないのか?
0827nobodyさん
2012/11/21(水) 18:06:37.46ID:XVcRCAEIViewファイルは用意しないとやはり駄目なのでしょうか?
public function download()
{
if( $this->request->is( 'ajax' ) )
{
echo "ajax transaction<br>";
}
else
{
echo "not ajax transaction<br>";
}
}
0828nobodyさん
2012/11/21(水) 18:30:32.75ID:???それでB派に、「ならオススメ教えてよ」って聞いてるのに
一向にオススメを言わないから「どうして?」ってなってるんだよ。
なぜここまでSmarty以外のテンプレートエンジン書かないか分からん。
ちなみに俺はテンプレートエンジンなんかイラねのC派ですw
0829nobodyさん
2012/11/21(水) 18:39:56.49ID:???0830nobodyさん
2012/11/21(水) 18:48:57.07ID:XVcRCAEIそれがクリックされると、AjaxにてcakePHP上のコントロールが呼び出され
そのダウンロードが完了したら、それをユーザのローカルに保存させたいのですがどうすれば良いでしょうか?
success: function( data, textStatus, jqXHR )
{
var gotten_data = $.parseJSON( data ); ← ここまではOK
//次にどういうコードを書けば xxx.csv としてファイルをユーザに保存させる事が出来るのか分かりません。
}
■ このスレッドは過去ログ倉庫に格納されています