トップページphp
1001コメント305KB

【PHP】フレームワーク CakePHP 8ホール目【1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/18(木) 10:00:59ID:6+kHM8kH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0143nobodyさん2010/04/05(月) 18:58:10ID:???
あとついでだけど、今のうちに規約に沿う癖をつけといた方が良いよ
Office / offices / OfficesController
0144nobodyさん2010/04/05(月) 22:59:55ID:1CfLL9NS
入力値のバリデーションを行なう前に
半角に変換したいのですが、
そういう処理はどう書けばいいでしょうか?
0145nobodyさん2010/04/05(月) 23:16:53ID:???
バリデーションに投げる前の段階でPHPで書けばいいと思うよ
0146nobodyさん2010/04/05(月) 23:20:10ID:???
beforeValidateでいいんじゃないの?

とにかくマニュアルは一通り目を通しておこうよ。
覚えなくてもいいけど、どこでどんな処理ができる・・・ってだいたい見当つくでしょ。
0147nobodyさん2010/04/05(月) 23:23:16ID:???
コントローラの中でモデルに渡す前にフィルタかけるしかないですね・・
0148nobodyさん2010/04/06(火) 01:21:23ID:???
146から147の流れになることがよくわからん
0149nobodyさん2010/04/06(火) 04:05:02ID:???
beforeValidateはモデル内のことなので
中でdataを加工してもviewまで引っ張れないのですよ
0150nobodyさん2010/04/06(火) 09:43:10ID:???
>>149
何でviewに変換後のデータが必要かは知らないけど、それが書いてなきゃ分からんでしょ

やろうと思えばModel内で加工することもできるし
0151nobodyさん2010/04/06(火) 18:16:24ID:???
>>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されました。

うーん、ナニが悪いんでしょう。ケーキ食べ始めなのでわからんす。
0152nobodyさん2010/04/06(火) 21:06:46ID:???
>>151
期待通りの動きをしないときはとにかくdebug()をあちこちにぶっ差して
どういうデータが来てるか見る。あとdebugモード2の時のSQLダンプをよく読むのがいいです。
0153nobodyさん2010/04/07(水) 02:07:26ID:???
debug()はよく使うのだけど、boolean型もしっかりとどの値か表示してほしいな
0154nobodyさん2010/04/07(水) 10:12:26ID:???
>>151
ん?ということは、リダイレクトしているということ?
だったら、発行されたSQLとか見て原因探ればいいんじゃない?debugは2にしてるよね?

Insertされないというのをもうちょっと具体的に書いてみてちょ
01551512010/04/07(水) 16:13:32ID:???
すいません、Cake焼き始めなものでよくわかってなく
説明も下手ですね。

if( $this->JimushoMaster->save($this->data) ){
$this->redirect('/jimusho_masters');
}else{
debug($this->JimushoMaster->invalidFields());
}

現在のコードはこんな感じです。
実行すると、レコードが追加されずに/jimusho_mastersにリダイレクトします。

saveは成功したという結果が返っているんですが、
レコードは増えていない画面に戻ります。

Validateが失敗していれば、エラーがでるはずですが
なにも表示されないのでエラーではないようです。

デバッグモードで画面下にクエリが出るんですが
そこにはINSERT文がないので、saveを呼び出しても
INSERTクエリが実行されてないようです。
0156nobodyさん2010/04/07(水) 17:24:09ID:???
>>155
読み返してみた。
第一引数はモデル名じゃなかったかな?
echo $form->create();
or
echo $form->create('JimushoMaster');
にしてみてどう?
01571512010/04/07(水) 17:41:43ID:???
>>156さん

なおりました!ありがとうございます!
なるほど、$formヘルパでcreateするときにモデル名を
指定するんですね。やっと解決できました。

ご助言ありがとうございます!
0158nobodyさん2010/04/07(水) 18:17:38ID:???
>>157
よかった。今後は英単語で命名するようにねw
0159nobodyさん2010/04/09(金) 01:42:43ID:???
キーボードの半角/全角漢字の列にある
1〜0までの数字を使ってる人いる?
1を押したときにShift押さなくても!が出るようにしてない人て
頭おかしいよね
0160nobodyさん2010/04/09(金) 04:23:45ID:???
ファイル(画像とか)のアップロード管理何つかってますか?
追加・更新・削除できるものでお勧めあったら教えてください
MediaPluginは更新が出来なかった
0161nobodyさん2010/04/09(金) 09:54:40ID:???
>>159
うん。頭おかしいと思う。

>>160
Mediaplugin更新できるでしょ。
ファイルアップロード系は導入するのが面倒で複雑だけど、
がんばってMediapluginを使うようにした方がいい。
自作するよりスピーディーだし、かなりうまく設計されていると思う。

そのレベルの話なら公式で聞いてみたらどうでしょ。
0162nobodyさん2010/04/09(金) 21:11:05ID:???
>>161 ありがと。もうちょっと試行錯誤してみます。
0163nobodyさん2010/04/10(土) 00:06:40ID:XPBwMnMW
layoutに変数を渡したいのですが、
どうやればいいですか?
0164nobodyさん2010/04/10(土) 00:09:03ID:???
$this->hogeに渡すと思い込んでましたが
setするんですね
失礼しました
0165nobodyさん2010/04/10(土) 14:31:33ID:???
1994年生まれの人集まれ!★3
http://gimpo.2ch.net/test/read.cgi/nendai/1269784099/
0166nobodyさん2010/04/11(日) 21:25:47ID:???
Authコンポーネントで質問です。

http://www.facebook.com/

このfacebookのindexページのように、ログイン画面と登録画面をindexに置きたいです。

Authだと、Auth用のusersコントローラを独立して作らないといけない? みたいなのですが、
自分の目的にはAuthを使えるでしょうか?

FaceControllers内
function index, functon edit, function add. function login, function logout,
などと、ひとつのコントローラに納めないとできないのではないかと思ったりして悩んでおります。

たぶん大きな勘違いかと思うのですが、どういうイメージでAuthを使えばよいのでしょうか?
0167nobodyさん2010/04/11(日) 21:46:51ID:???
トップはフォームだけで、フォームからUsersコントローラーのaddアクションを呼べばいいのでは?
0168nobodyさん2010/04/12(月) 09:52:15ID:???
>>167

ありがとうございます。
いろいろと試してみます。
0169nobodyさん2010/04/12(月) 11:19:42ID:???
Authコンポーネントを使うと、

Cannot modify header information - headers already sent by

というエラーが出てしまいます。

調べたところ、

<?php ?>の上下の改行をなくす、php.iniでoutput_bufferingをonにする。
などの解決方法がありますが、試しても上手く行きませんでした。

layoutもデフォルトなのでheaderの部分を別個書いた記憶もなく、
ほとほと困り果てました。


なにかほかに解決方法はないものでしょうか?
0170nobodyさん2010/04/12(月) 12:13:51ID:???
>>169
appコントローラーで何か文字を出力してるんじゃないの?
0171nobodyさん2010/04/13(火) 05:20:46ID:4rbnTecY
携帯からのアクセスの場合だけ使いたいヘルパーがあるのですが
動的にヘルパーを読むにはどうしたらいいですか?
0172nobodyさん2010/04/13(火) 13:09:50ID:???
>>171
普通にの場合も読んでおけばいいと思うけど、どうしても携帯の時だけというのなら
app::importとかでいいんじゃない?
0173nobodyさん2010/04/13(火) 13:10:31ID:???
PC が抜けてた

普通にPCの場合も読んでおけばいいと思うけど、どうしても携帯の時だけというのなら
app::importとかでいいんじゃない?
0174nobodyさん2010/04/13(火) 14:41:15ID:???
CakePHP 1.3.0-RC4 キタ━━━━━━(゚∀゚)━━━━━━ !!
http://bakery.cakephp.org/articles/view/cakephp-1-3-0-rc4-has-arisen
0175nobodyさん2010/04/13(火) 14:41:46ID:???
This release marks the last release candidate, before 1.3.0 goes to stable.
とあるので、すたぶるが来る日も近そうです
0176nobodyさん2010/04/13(火) 15:19:57ID:???
今度のは、どんなバグが待っているのだろう...
0177nobodyさん2010/04/13(火) 16:35:06ID:???
1.2.0のときバグなんてあったっけか?
0178nobodyさん2010/04/13(火) 16:40:10ID:???
AuthComponent がバグっていたような
0179nobodyさん2010/04/13(火) 16:55:01ID:???
ああ、あったねえ。
でも、それって、1.1でも1.2でも穴空いてたような
0180nobodyさん2010/04/14(水) 00:09:32ID:???
>>174
昨日の夜に見たときは、なかったんだけどな…日付改竄?キャッシュ?

>>175
このペースでいけば4月26日かな?
01811802010/04/14(水) 00:12:06ID:???
見たの昨日の夜じゃなくて、一昨日の夜だった
スレ汚しスマン
01821692010/04/14(水) 09:53:38ID:???
>>170

どうもありがとうございます。
なぜかmodelフォルダのファイルを作成し直したら直りました。
おそらく、ファイルの文字コード関係が怪しいと思ったのですが、結局原因は特定できず。。


ちなみに、Authコンポーネントを使う時は、

pages_controller, users_controller

などと、別途usersのコントローラを作成しますが、
これはわかりやすくするために分けるだけで、一つのコントローラに統合することも可能
ということでしょうか?
0183nobodyさん2010/04/14(水) 10:08:05ID:???
>>182
ファイル末尾の ?> を削除するところから始めたら良いことあるかもね

Authについては、まず、Userモデルを使って何か動かしてみれば良いんじゃないかな?
手を動かしたほうが早く身につくよ
01841692010/04/14(水) 10:18:49ID:???
>>183
レスありがとうございます!

末尾の ?>も排除したりいろいろしたのですが、結局上手くいきませんでした。。
どうもDOM付エンコードとかそっち系かなとにらんでおります。

Authは実際に動かしているのですが、usersコントローラのものを
pagesコントローラに少しずつ動かしても結構動くので、もしかして
全部移動できるかな? と思ったのです。
0185nobodyさん2010/04/14(水) 10:29:59ID:???
>>184
そりゃ動く
でも、意味がない

しかもよりによってPagesControllerだと、何のため?ってことになるし、単にメンテがしにくくなるだけのような気が

今後もCakePHPを使っていくつもりなら、CakePHPの思想に従ってみたらどうか
01861692010/04/14(水) 10:56:37ID:???
>>185

わかりやすい解説ありがとうございます。
cakeの思想に従うことにして、すっきりするようにします。
0187nobodyさん2010/04/14(水) 12:56:22ID:???
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'); と書けば動くのですが。

上手い方法はないものでしょうか?

0188nobodyさん2010/04/14(水) 13:18:29ID:???
>>187
アソシエーションの設定とControllerのsave周りを詳しく
0189nobodyさん2010/04/15(木) 00:04:30ID:???
みんなviewはphpコード書きまくり?

はるか昔smarty使ってたこととか、デザイナーにphpいじらせたくないこととか考えると
smarty組み込みたいんだけど、ヘルパーの引数に配列が渡せなくて詰んだ。
参考サイトは山ほど見たんだけど、$this->aa('key1','value1') で配列生成できているところまでは確認したけど
ヘルパー引数にほりこんでもヘルパーが動かない。。。
0190nobodyさん2010/04/15(木) 09:53:08ID:???
>>189
ここは見た?
http://d.hatena.ne.jp/am11op/20070614/1181837256

個人的にはSmartyなぞ必要ないと思っているが、使いたいヤツがいるのでしかたなく...
0191nobodyさん2010/04/15(木) 10:06:32ID:???
>>190
きめえwwwそこまでせねばらなんものかwww
いやそこまでせねばならんからそうしてるんだろうけど。
0192nobodyさん2010/04/15(木) 10:39:21ID:???
>>189
view で使う程度のphpなら直接デザイナーに教えた方がいいと思うが。
smarty なんて 今の時代に cgi 使ってプログラムやってるようなもん。
0193nobodyさん2010/04/15(木) 10:40:53ID:???
>>190
つかそこまでやるやつがなぜbakeにこだわるのかがわからん
0194nobodyさん2010/04/16(金) 16:07:48ID:???
>>192
きっとデザイナがviewの中で変なphp書くのが嫌なんだろ
0195nobodyさん2010/04/16(金) 16:41:46ID:???
つーか、下手にデザイナにviewいじられるとバグの温床になる気がするんだけど。
さわらせている人っているのん?
0196nobodyさん2010/04/16(金) 17:00:25ID:???
システム作ってからデザインさせることになると、デザイナがviewをいじるんじゃないのか
やったことないけど
0197nobodyさん2010/04/16(金) 17:10:39ID:???
プログラマが「ここにこんなループが来るからその部分のデザインたのむ」って
言えばいいだけでは?

一人で全部まかなってるフリーの立場からしたらプログラマとデザイナがそれぞれ
自分の仕事だけやってればいいなんてうらやましい。だからもっと話して
連携すりゃいいのにと思うなぁ。
0198nobodyさん2010/04/16(金) 17:14:40ID:???
ありきたりのデザインなら自分でできるが
アーティスティックなのを請け負うと、デザイナ必要になるよね

大抵、ループを説明するより自分でいじったほうが速い
0199nobodyさん2010/04/16(金) 17:23:20ID:???
ああそうか
見た目だけじゃなくて、機能を考えたら
例えばリストにするよりか、プルダウンにしたほうがいい
なんてことになって、それならAJAXつかっちゃおうとかに
なったりしたら、デザインもプログラムもいろいろ
いじるところが出てくるな
となるとどっちを主導でいくかってところで難しくなるのか
なるほどなるほど。

それならいっそう話し合いをして連携しないといけないと思うけど
そういう仕事ってディレクターとかコーディネーターみたいなのが
間にいるもんなんじゃないの?
自分で勝手にいじったらいろいろややこしくなるような気がする。
0200nobodyさん2010/04/16(金) 19:01:38ID:???
デザイナー、プログラマー以上にまともなディレクターが少ないのがこの業界の癌だよな
0201nobodyさん2010/04/17(土) 00:35:56ID:???
ならば貴公がなればよかろうに
0202nobodyさん2010/04/17(土) 00:55:04ID:???
政治家の文句も言うが、じゃあ政治家になれと言われたことはなかった
0203nobodyさん2010/04/17(土) 12:57:20ID:???
なるほど!
そういうことか。
本心では「政治なんて誰がやっても同じ」と思ってるから、
政治家になれとは言わない。
それと同じようにWebのディレクティングも誰がやっても同じだから・・・。
02041892010/04/17(土) 13:52:28ID:???
皆様コメントありがとうございます

>>190 さんの紹介してくれてる記事はもちろん試していて、
$this->aa()でview内でarray生成はできるけど(自作関数内var_dumpで確認)、helper内だとうまく渡せないんです


議論がされてますが、デザイナーにPHP触らせたくないというのが理由です。
こちらデザインは素人レベルでシステムのみ対応しているため、発注元にデザイナーを別途雇ってもらうケースが多いのですが
そのときにコードぐちゃぐちゃにされて「動かないからなんとかしてくれ」となるのが面倒なんですよ
(自作の各種パッケージをちょっとカスタマイズして売る、というやり方を副業でやっているので・・・)
あとはクライアントがsmarty指定するケースも多いです

もう少し軌道に乗ったら、提携デザイナーさんを何人か探して、
その人達を紹介するやり方にかえようと思います。

そんなわけで、1.3からはPHPコードべた書きでいこうと思います。
0205nobodyさん2010/04/19(月) 16:55:28ID:WgJ57/BK
cakeインストールしたところです
Cake is NOT able to connect to the database.
と言われましたが、当面はDBを使いません。
このメッセージが出ないようにするにはどうすればいいのでしょうか?
0206nobodyさん2010/04/19(月) 19:56:16ID:???
グーグル先生に聞くといいよ。

http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_jaJP283JP283&q=cakephp+%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%80%80%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=
0207nobodyさん2010/04/19(月) 22:23:19ID:faTvhF7k
以下の処理を実現させたいのですが、CakePHPを初めて2週間の初心者ですので、どのようにすべきか分かりません。ご教授頂きたい。

1.あるテーブルの内容を一覧で表示。(各行にはチェックボックスがある)
2.一覧のチェックボックスにチェックが付いているものを、submitした時、別画面の一覧に表示させたい。

2番の処理をどのようにしたら良いでしょうか?
02081512010/04/19(月) 22:37:03ID:???
チェックされたIDをfindでひっぱってきて表示すればいいんでないの?
0209nobodyさん2010/04/19(月) 23:48:06ID:faTvhF7k
>>208
返信ありがとうございます。

具体的なコードを書いてくれるとありがたいです。
質問内容が抽象的で申し訳ないのですが…
初心者ということで勘弁してください。
0210nobodyさん2010/04/20(火) 01:53:35ID:???
ざけんなボケ
0211nobodyさん2010/04/20(火) 03:02:03ID:???
cake以前じゃね?
0212nobodyさん2010/04/20(火) 11:21:01ID:???
春ですね
0213nobodyさん2010/04/20(火) 23:34:34ID:???
初心者を免罪符にするとフルボッコになる
これテストにデルから覚えておくように
0214nobodyさん2010/04/21(水) 01:33:25ID:???
>>207
優しい俺が優しく解説致します。
2番の処理を、CakePHPとは関係なくあなたのお使いの言語環境(おそらくPHP)を使って
どのように実現するのか、考えてみれば自ずと分かります。
Cakeで楽になる部分はあっても、素のPHPで(自分のスキル的に)いかんともしがたい部分を
Cakeが良きに計らってくれるというわけでは、必ずしもありません。
季節の変わり目、まだまだ寒い日もあるかと思いますので、ご自愛下さい。
0215nobodyさん2010/04/21(水) 14:44:22ID:???
自分で初心者と言うような人でさえさわるようになったってことはcakeもずいぶんメジャーになったんだな
0216nobodyさん2010/04/21(水) 14:49:53ID:???
初心者なら素直にステップ1から順に踏んで行くほうがいいよね
いきなりcakeから入るより結果的にはそのほうがはやく覚えられると思うし
っていうかPHPなんかちゃんと勉強すれば2日か3日ぐらいでだいたい把握
できるんだからそれを省略すんなよと…
0217nobodyさん2010/04/21(水) 21:06:23ID:???
PHPが原付免許で、cakeはオートマみたいなもんだなレベル的に
PHP学習しても理解できないとか知的障害レベル
0218nobodyさん2010/04/21(水) 21:14:37ID:???
PC触って3日目の子が頑張れば構築できるのがcakeなのに
知的障害とかアホか
0219nobodyさん2010/04/21(水) 21:34:45ID:???
誰か218を日本語に翻訳してくだしあ
0220nobodyさん2010/04/21(水) 21:42:26ID:???
英語が出来ないと辛いぞ
0221nobodyさん2010/04/22(木) 12:04:30ID:???
知的障害は言い過ぎ。
0222nobodyさん2010/04/22(木) 18:04:46ID:???
>>207
もう見てないだろうけど
DBから一覧を取得したと時に各ユーザー(例えばね)のIDも取得してると思うけど
多分、find('all')で取得でforeachだよね?
<? e($form->checkbox('Model.name.id'))?>
submitで来たあとは1が入ってる人を一覧費だけじゃないかな

0223nobodyさん2010/04/23(金) 04:16:55ID:???
人それぞれ成長の度合いって物がある。
自己満足のためだけに発言する自分の卑しさを省みてみなよ。

ひとまずPHPの基本的な本を読んだほうがいい感じだけどね。
他の言語も含めて経験が無ければいきなりフレームワークはやめたほうがいい。
0224nobodyさん2010/04/23(金) 14:42:23ID:???
CakePHP 1.2.7 released
http://bakery.cakephp.org/articles/view/cakephp-1-2-7-released
0225nobodyさん2010/04/23(金) 15:32:11ID:IhQ26v2D
動的にモデルの構造やビューのフォームが切り替わるようなアプリを製作予定なんですが、
こういったアプリにはCakePHPは向かないですか?

簡単に言うと、CMSのカスタムフィールドを拡張したようなイメージで、
データの入力タイプ(フォームの種類、バリデーションのルール)を用意しておいて、
ユーザーの入力に応じて、動的に表示するフォーム・バリデーションやアプリの挙動を切り変えます。

素で作るとすると、データ用の基底クラスを作って、入力タイプごとに派生クラスを作っていく感じになると思います。

こういった独自のクラスをCakePHPのMVCに組み込むのが難しそうな感じがしているのですが、
CakePHPの場合、どうやるのがいいんでしょう?

それとも他のフレームワークを使ったほうがいいですかね?
0226nobodyさん2010/04/23(金) 15:58:17ID:???
>>225
モデルの構造が変わるっていうのはテーブルを作の?
0227nobodyさん2010/04/23(金) 16:18:29ID:???
>.226

モデルのバリデーション機能を利用しようと思っていますが、使い切りのジェネレーターのようなものなので、
今の所、フォームから入力されたデータはセッションに保存する予定です。
ですので、テーブルも作りません。

ただ、後々ユーザーの設定(フォームの組み合わせ)をDBに保存する予定があります。
が、これは動的なフォームを生成・切り替えさえできれば、設定だけ保存しておけば済むのであまり問題ないかと思ってます。

問題はデータ構造の切り替えをどうするか、です…。
例をあげると、

1) ユーザーがドロップダウンリストから「データパターン1」「データパターン2」などを1つ選んでサブミット
2) 画面遷移後、選択したタイプによって、フォームを表示。ユーザーが入力してサブミット。
 「データパターン1」の場合は「ドロップダウンリスト」を表示
 「データパターン2」の場合は「テキストフィールド」を表示
 など
3) データパターンの種類に応じたバリデーションを行う。

バリデショーンは動的に切り替えられそうなので問題ないのですが、
データ構造をもたせたクラスをどう組み込むかで、CakePHPでどうやるのがよいのか悩んでます…。
0228nobodyさん2010/04/23(金) 16:25:09ID:???
>>227の例では項目が1つですが、実際には複数の入力タイプの組み合わせになり、
各項目を操作していく感じになります。

パターン1 = テキスト + ドロップダウンリスト
パターン2 = テキスト + ラジオボタン
など

DataModel(extends AppModel)などを作り、TextDataModel(extends DataModel)などを作ればよいのかな、
(その他、DataModelの組み合わせを扱うモデルクラスなど)
と思いつつ、CakePHPではかえって複雑になってしまう気がして悩んでます。
0229nobodyさん2010/04/23(金) 16:28:36ID:???
>>228
うーん。イメージがいまいち掴めない
最終的に保存する例を教えてくれ
あと、セッションに保存したデータはどうするの?そのあと
0230nobodyさん2010/04/23(金) 16:29:11ID:???
保存されるデータの例 だった
0231nobodyさん2010/04/23(金) 16:41:57ID:???
>>229

フォームに入力したデータそのものは保存しないです。
入力されたデータを計算し、最終的に結果を画面に表示(またファイルにしてダウンロードしてもらう)だけですので。
後々データを保存する場合も、セッションをハッシュ化してそのまま保存しようと考えてます。

計算を行う際(と後々データからフォームを復元する際)に、フォームの種類を「走査」する部分をどうするか、が悩んでいる部分です。

極端な話、モデルを一つだけ作って、その中で

switch($form_type) {
case 'text':
...
case 'checkbox':
...
}

などとし、バリデーションなどだけ動的に切り替えてもいいのですが、
やはり、柔軟性を高めるためにもデータの種類ごとにクラス化したいと思ってます。

似たようなアプリがあれば説明しやすいのですが、なかなか見つからないもので、、、すみません・・・
0232nobodyさん2010/04/23(金) 16:46:50ID:???
イメージとしては、メールフォームの作成アプリが近いかもしれません。

ttp://onlineform.jp/gen/form?template=inquiry&type=1&color=black
0233nobodyさん2010/04/23(金) 16:51:23ID:???
>>231
外してるかもしれんが自分なら

モデルはひとつ
データに応じてバリデーションを切り替える
種類の識別は、種類を格納したデータを持っておいても良いし、フィールド名(擬似的なフィールド名)で識別しても良い

って感じ。
柔軟性を高めるというのが何を意味しているのかはちょっと分かんなかった
0234nobodyさん2010/04/23(金) 17:01:52ID:???
>>233

なるほど。
データの種類ごとにクラス化すれば、処理を委譲できるのでそちらのほうが楽かな、と思ったのですが、
やはり、CakePHPを使う場合はベタな書き方のほうがいいのかな。

もうちょっと色々調べてみます m__m
0235nobodyさん2010/04/23(金) 17:19:44ID:???
>>234
クラスにしてもモデルにしてもいいんだけど、
結局データの種類に応じて読み込むんだろうから、一緒かと
あと、バリデーションだけなら、外出しするほどではないんじゃないかと想像
0236nobodyさん2010/04/23(金) 17:22:17ID:???
Single Table Inheritanceというのが近そうだということがわかりました

ttp://bakery.cakephp.org/articles/view/inheritable-behavior-missing-link-of-cake-model

ただ、やはりCakePHPで想定されている使い方ではないようですね…

モデル自体を自力で実装という手もありますが、少し凝ったことをしようとすると難易度が極端にあがる、
ということだけはわかりました…。
0237nobodyさん2010/04/23(金) 17:42:54ID:???
パターンとバリデーションをセットにして記録したモデルを作っておけばいいだけじゃないすかね。
0238nobodyさん2010/04/23(金) 18:27:26ID: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を返す)
ここをコメントアウトするとキャッシュされています。
ご教示お願いいたします。
0239nobodyさん2010/04/24(土) 10:57:06ID:???
>>238
sageてね

Cache::readの前にもCache::setが必要だと思う
が、解決するかは分からない
0240nobodyさん2010/04/24(土) 11:13:01ID:???
CakePHP製のソースを色々見てまわってるんだけど、
OOPを活かした書き方をしているものは皆無ですね

Javaちっくな書き方をするには、
やはり、フレームワークの縛りが強すぎるのだろうか

もし、なにかよいサンプルがあれば教えてください
0241nobodyさん2010/04/24(土) 12:04:17ID:???
Javaちっくな書き方したいならsymfonyとかの方が向いてるんじゃない?
CakePHPはphp4対応だから無理がある
0242nobodyさん2010/04/24(土) 12:43:41ID:???
てか、なんでもかんでもオブジェクト指向にしなくていいじゃん。
継承しすぎて無意味に複雑になってしまうこともあるし。
自分1人でやってるならいいんだけど、多人数でやるなら分かりやすさを優先すべし。
■ このスレッドは過去ログ倉庫に格納されています