【PHP】フレームワーク CakePHP 2ホール目
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/11/14(水) 02:50:28ID:???http://www.cakephp.org/
10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0737nobodyさん
2008/03/04(火) 13:42:36ID:???確かにコントローラとコンポーネントを=で結びつけるのは変だね
0739nobodyさん
2008/03/04(火) 14:08:44ID:???Vコンポーネントの中にはVの処理をカプセル化したもの
Cコンポーネントの中にはCの処理をカプセル化したもの
だからCコンポーネントの中にMやVの処理を入れてはダメ、Cの処理だけ
複雑化したら、それはコンポーネントといえない
なぜなら再利用化に適さないから
コンポーネントは複雑な処理じゃなくて、出来るだけ単純化したものを書くべき
0740nobodyさん
2008/03/04(火) 14:09:38ID:???CakePHPでは
Controllersフォルダ中にComponentsフォルダがあるの知ってる?w
Modelsフォルダの下behaviorsフォルダ。
Viewsフォルダの下にHelpersフォルダ。
どうせ知らなかったでしょ? 勉強してでなおしなさい。ば〜かば〜か
0741nobodyさん
2008/03/04(火) 14:12:50ID:???誤解の元だから。
なんでCコンポーネントていえないのかね
0742735
2008/03/04(火) 14:15:36ID:???生成しちゃうのってどうなんでしょうか?
>>734がネタばれしちゃったけど、標準の一部のコンポーネントでは
直接生成しているのよね。
それなら設計的にはコンポーネントにもusesプロパティが
あってもいいと思うんだけど、実際には無い。
コンポーネントにusesプロパティが無いのがおかしいのか、
それともコンポーネントでモデルを直接生成している
一部のコンポーネントの方がおかしいのか。
0743nobodyさん
2008/03/04(火) 14:16:14ID:???0744nobodyさん
2008/03/04(火) 14:17:22ID:???ここはCakePHPスレなので、Componentで問題ありません。
誤解のもの? あなた誤解していたんですかw
0745nobodyさん
2008/03/04(火) 14:18:20ID:???0746nobodyさん
2008/03/04(火) 14:19:09ID:???生成するてのは再利用化に欠けるんだよ
MとCにそれぞれコンポーネント作って
つなげればいいじゃんか
0748nobodyさん
2008/03/04(火) 14:22:37ID:???シーコンポーネントなんて恥ずかしい言い方は論外として
コントローラコンポーネントでぐぐったらStrutsが出てきた。
どうやらJava厨かw
CakePHPスレでStruts用語使わないでくれないかな。誤解の元だから。
0749nobodyさん
2008/03/04(火) 14:23:59ID:???単にお前の用語の使い方が間違っているんだよ。
Cコンポーネントなんて用語はCakePHPにはでてこない。
0751nobodyさん
2008/03/04(火) 14:26:28ID:???0752nobodyさん
2008/03/04(火) 14:27:29ID:???その質問は強烈すぎw
Cake知らない人には答えられないし、
答えたとしたら、自分のマヌケさを露呈することになるw
答えまだかな?逃げるかな?♪
0755nobodyさん
2008/03/04(火) 14:32:35ID:???behavirosの下ならそれはコンポーネントじゃなくてビヘイビアだろw
0756nobodyさん
2008/03/04(火) 14:36:12ID:???外注先で赤っ恥かきそうだなw
0757nobodyさん
2008/03/04(火) 14:37:01ID:???0758nobodyさん
2008/03/04(火) 14:37:38ID:???0759nobodyさん
2008/03/04(火) 14:39:02ID:???0760nobodyさん
2008/03/04(火) 14:44:18ID:???誰がつなぐのでしょうか?
コントローラからモデル内部のビヘイビアは
普通直接見るもんじゃないですよね?
コントローラで、コンポーネントとモデルをつなぐというのならわかるのですが?
あとここはCakePHPスレなのでCakePHP用語で話してください。
0768nobodyさん
2008/03/04(火) 14:58:04ID:???そもそもAuthComponentはコンポーネントで実装するものなのか?
AuthComponentはコンポーネント内部で、呼び出しもとの
コントローラが知らないモデルを、直接参照しているが
これは設計としてありなのか?
設計があまりよくないというのなら、こういうものを作る場合
本来はコントローラにモデルを参照させて、
コンポーネントに渡すべきなのか。
コンポーネントとビヘイビアをつなぐといっている人が
いるみたいですが、この人の頭は大丈夫なのか。
以上よろしくお願いします。
0769nobodyさん
2008/03/04(火) 15:00:26ID:???0770nobodyさん
2008/03/04(火) 15:01:32ID:???0771nobodyさん
2008/03/04(火) 15:02:08ID:???0772nobodyさん
2008/03/04(火) 15:03:58ID:???自演激しすぎwww
0773nobodyさん
2008/03/04(火) 15:04:54ID:???言っている言葉がめちゃくちゃだな
0774nobodyさん
2008/03/04(火) 15:06:34ID:???そう俺とお前が激しく書き込んでるだけだよwww
0775nobodyさん
2008/03/04(火) 15:08:17ID:???>>762と>>763の知能の差に吹いた
767 :nobodyさん:2008/03/04(火) 14:55:20 ID:???
>>766
自演乙
これ書いたの両方お前だなw
0776nobodyさん
2008/03/04(火) 15:09:59ID:???0777766
2008/03/04(火) 15:58:40ID:???CakePHPのビヘイビアは構造上モデルに依存するため
モデルを介さずコンポーネントとビヘイビアを
直接繋げるなど全く理解不能であり脳障害患者もいいところ。
って、分かってて言ってるんだろうけどね。
>>768
俺は「アリ」だと思う。
一般にMVCにおいて、コントローラはユーザからのリクエストを受け取り処理をモデルへ、表示をビューへ依頼するんだけど
モデルへのアクセスを必ずコントローラを通さなくてはならない、とは規定されていない。
現にMVCモデル図などググって見てみると表示担当のはずのビューからすらモデルへ矢印が引かれているだろ?
CakePHPのコントローラは「便利だから」簡単にモデルアクセスする機能が実装されているけど
それを理由に「コントローラ以外はモデルに触っちゃダメ」とは言っていないよね。
つまりコンポーネントからのモデルアクセスは設計的に十分可能であり、後はプロジェクトのコーディング規約次第。
心情的に、あっちこっちからモデルが参照されるとコ汚い感じがするよねって話なら同意。
AuthComponentはコンポーネント内で完結するには結構無理したよねって話も同意。
あれはCakePHPの開発チームが
「コントローラに$components = array('Auth')って書くだけで認証機能組み込めちゃうんだぜー!」
って言うために詰め込んだと思うんだ。アメはそういうの大好きだし。
>>775
>>776
ちげーよこの馬鹿ども。
0780nobodyさん
2008/03/04(火) 16:29:53ID:Zbgc5QoEパフォーマンス悪いのかな。実装にあたりPHPで書かなきゃいけなかったり、拡張子
がctpだったりと精神衛生的に気持ち悪い印象があります。
Smartyをビューコンポーネントとして使ったほうがいいのかな、結構利用者っていますかね
0781nobodyさん
2008/03/04(火) 19:28:59ID:???やっとまともなレスがw
なんかそういうサンプルレベルじゃなくて実運用レベルで
ちゃんとしたMVCになっているオープンソースのアプリ無いかな。
参考になる奴。
もう一つ別の疑問があって、Sessionはモデルではないのか?
という疑問。いろいろな理由で本来あるべき設計を崩すことに
抵抗は無いけど、本来あるべき設計というのを知りたいな。
0782nobodyさん
2008/03/04(火) 19:36:20ID:???拡張子が違うだけの生PHPだから、機能はPHPで出来ることすべてだし、
Smartyよりもパフォーマンスが悪いということは無いよ。
Smartyが使いたいのなら、それもありだと思うよ。
そういう記事結構あるし。ただやり方はいくつかあるっぽい。
どうせなら、綺麗に違和感なく組み込みたいが・・・。
0783nobodyさん
2008/03/05(水) 00:14:06ID:???Modelに保存しないので、Modelの$validate に設定する方法は使えません。
それでいながら、emailのチェックなどコントローラで
自力でやるのは面倒なので、Modelのvalidateで使える機能を
そのまま使いたいです。
0786nobodyさん
2008/03/05(水) 00:27:23ID:???Post/test
あとはコントローラーでvalidateチェックも出来るよ
0787nobodyさん
2008/03/05(水) 00:35:07ID:???$form->create(なんたら)
$form->input(なんたら)
$form->end(なんたら)
でフォームが作れて、データを送信できるのは知っています。
また、コントローラで$this->dateの入力チェックができるのもしっています。
ただ、こういうときに、validate変数に条件を定義するだけで
簡単に入力チェックができるModelの機能と
同等レベルの簡単さでコントローラで入力チェックがしたいのです。
0788nobodyさん
2008/03/05(水) 00:39:22ID:???'test' => VALID_NOT_EMPTY
って書けば出来るけど?
もうちょっと工夫してから文句言ってくれ
0790nobodyさん
2008/03/05(水) 00:51:56ID:???'test' => VALID_NOT_EMPTY,
);
0792nobodyさん
2008/03/05(水) 01:00:31ID:???じゃ、コントローラでチェックするしか無いじゃん。
しかもその縛りの理由がよくわかんね。
0793nobodyさん
2008/03/05(水) 01:02:02ID:???783 名前:nobodyさん[sage] 投稿日:2008/03/05(水) 00:14:06 ID:???
Formのバリデーションってどうやっていますか?
Modelに保存しないので、Modelの$validate に設定する方法は使えません。
それでいながら、emailのチェックなどコントローラで
自力でやるのは面倒なので、Modelのvalidateで使える機能を
そのまま使いたいです。
0794nobodyさん
2008/03/05(水) 01:06:21ID:???それすらしたくないなら、コントローラでやればいい。
0796nobodyさん
2008/03/05(水) 01:08:28ID:???0798nobodyさん
2008/03/05(水) 01:17:41ID:???0799nobodyさん
2008/03/05(水) 01:19:51ID:???最初のカキコにちゃんと書いているのに、
それを理解しないで見当はずれなレスをつけやがる。
まったく馬鹿につかまったもんだ。
ほかの人、お願いします。
どうにかモデルのバリデーション機能を有効活用できないでしょうかね?
単に関数を呼ぶだけなら簡単なんですが、そのエラーメッセージを
ちゃんと表示できるようにしようと思うと?で。
0800nobodyさん
2008/03/05(水) 01:26:17ID:???0801nobodyさん
2008/03/05(水) 01:42:45ID:???0802nobodyさん
2008/03/05(水) 01:46:23ID:???エラーを出すには、ClassRegistryあたりを呼び出さなきゃならないようだ。
そこに登録されていないと、$form->validationErrorsが設定されない。
ビューの頭で$form->validationErrorsを設定すればどうにか出せるが・・・
>>801
何度もいいますが、モデルは使いません。
0803nobodyさん
2008/03/05(水) 02:29:12ID:???その質問の仕方だと
0804nobodyさん
2008/03/05(水) 02:57:49ID:???たとえばセッションに保存したいとか。
0805nobodyさん
2008/03/05(水) 03:20:25ID:???$this->Hoge->set($this->data['Hoge']);
if ($this->Hoge->validates()) {
(成功)
} else {
(Viewに戻るとエラータグにvalidateのメッセージが表示される)
}
これじゃ駄目なの?
DBとの関連が無いModelなら別に使っても問題ないのでは?
0806nobodyさん
2008/03/05(水) 03:33:48ID:???だからセッションに保存するだけで、DBに保存しなくても。
モデルのバリデートを使用する事は出来るって答えもあったじゃん。
なんか根本的にコミュニケーションが上手くいって無いというか、もっと柔軟に考えたら?
自分が分かるからって他の人が分かるとは限らないし、目的が分かれば違うアプローチもあるかもしれないし。
まぁ、こんだけ答えてもらってありがたいと思わないんだから何言っても無駄だろうけど。
0807nobodyさん
2008/03/05(水) 04:11:55ID:???まともなのはないのか?
0808nobodyさん
2008/03/05(水) 04:25:34ID:???App:import('Core','Validation'); //これは多分いらんかも
$obj = Validation::getInstance();
あとてきとーにチェック
0809nobodyさん
2008/03/05(水) 04:30:30ID:???getInstanceでオブジェクト取得する必要は無さそう
Validation::ip();
とか
Validation::date();
で良いみたい
つーかこれぐらい探せば直ぐ見つかるだろうに・・・・
Model→バリデートメソッド検索→バリデート部分をざっくり読む→
Validationクラスが見つかる
0810nobodyさん
2008/03/05(水) 04:46:50ID:???因みに調べたcakeのバージョンは1.2の方ね
1.1は見てみたら仕様が糞過ぎるので自分でやった方が早い
0811nobodyさん
2008/03/05(水) 08:19:49ID:???エラーセットしてくれないしコントローラーでValidation::chibi($debu, $hage);を使うのは意味無さ過ぎね?
equalToなんてもう最高だよね
0812nobodyさん
2008/03/05(水) 09:35:38ID:???Model用に作ったFormのデータからカラム毎にvalidateしているのはModel自身
それなのにModel使うのが無理矢理とか言ってるんだから、後はもう自分で作れば?w
ていうか少しぐらい自分でソース読めよ
0814nobodyさん
2008/03/05(水) 10:30:12ID:???0817nobodyさん
2008/03/05(水) 13:11:50ID:???ここで聞く方がメンドクサイ。
0818nobodyさん
2008/03/05(水) 13:27:00ID:???一つのフォームで二つのテーブルにデータ格納するときとか、
どういうコードで保存して、それでちゃんとエラーメッセージを
出すようにするとかわけわからん。
単純な例では便利なのはわかるけど、コントローラからビュー(というかFormHelper)への
値(エラーメッセージ含む)のセットや「モデルのデータ型から適切なフォーム生成」の
所が見えないところで行われているからぜんぜん流れがつかめない。
0819nobodyさん
2008/03/05(水) 13:51:38ID:???0820nobodyさん
2008/03/05(水) 14:18:03ID:???>>781
CakePHPだと実運用しているサイト自体がまだ少ない上、バージョンによって仕様が激変するため
これだけは入れとけor見とけ!というキラーアプリはまだ出ていないな。YOU作っちゃいなよ。
まー何だかんだ言ってAuthComponentもかなりいいと思うぞ。例えば
----
アカウント名とパスワードを使ったログインが済んでいて、顧客区分がXXXまたは###かつ女性のユーザのみが
アクセスできるコントローラだが、%%%のアクションにだけはアクセスさせたくない。
----
…と頭の痛くなるアクセスコントロールなども少し頑張れば出来る。
モデルはデータの入出力を司るんだから、セッションもモデルの一部じゃね?という話なら理解できる。
データソースがあって、そこへの入出力があるからね。
俺は、モデルの扱うデータソースをほぼRDBMSに限るってルールは単純に歴史的なものだと思うぞ。
セッションは大量検索しないし、接続ごとに切れる特殊性があるだろ!とか言われるかもしれないんだけど
そもそもSQLを使うRDBMS自体が特殊で他と相容れないものなんだから、情報の入出力という観点で取捨選択した結果
最もコスト対効果の大きなものの(=RDBMS)サポートに専門化したんじゃないかな。
今後、XMLDBやODBMSやらが高速かつ手軽に投入できたり、誰かが言ってた
ステートフルWebアプリケーションとやらが台頭してきたら状況が変わってくるかもしれないけど。
つーかモデルってデータの出し入れだけじゃなくて、もっと広義の意味だとビジネスロジック全般を書く所なんだから
何でもかんでもコントローラに詰め込む最近の風習ってちょっと違和感ないか?
コントローラって要はユーザリクエストの受け口じゃん。
0821nobodyさん
2008/03/05(水) 14:20:05ID:???まずいケーキだってケーキ様が言っている。
http://cakephp.org/files/OCPHP.pdf
0822nobodyさん
2008/03/05(水) 14:26:43ID:???0823nobodyさん
2008/03/05(水) 14:35:10ID:???ソースコード見た?
さわりだけじゃなくて、完全に近いマニュアルが無い以上
ソース見なきゃいけないんだけど、$options[?]に何が使えるのか
混沌としすぎている。がんばれば出来るのかもしれないが、
あんなのとがんばるのはもう嫌だ。
もう俺は自作ヘルパーに置き換えたからどうでもいいけど、
管理画面はともかく、あれで思い通りに作るのは無理だろう。
たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
ここまでは質問&答えがあったきがするけど、
そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
自作のはさらに、同じテキストフィールド入力フォームでも
表形式の場合と通常の状態でプロパティ一つで形を変えられるようにしたり、
ビューのviewとeditでほぼ同じコードが使えるように、入力可能状態と
閲覧状態をフィールド名を指定することで切り替えたりする機能があるけどね。
0825nobodyさん
2008/03/05(水) 15:18:23ID:???0826nobodyさん
2008/03/05(水) 15:19:23ID:???便利だよ。仕事で作っている奴だからあげられないけどw
作っているアプリでFormHelperを使っていたところあったけど、
いろいろ修正する必要があって、それでもFormHelperでがんばっていたけど
あまりの使いにくさに、自作のヘルパーに置き換えちゃったw
これは作りこんでいる人じゃないとわからないだろうね。
上のほうでモデルを使わない状態でのバリデーションの話をしている人がいるけど、
自作の奴はモデルの有無に依存しない
(データおよびエラーメッセージをコントローラで設定する)
ので、そういう用途にもちょっとの修正程度で使えるだろう。
0827nobodyさん
2008/03/05(水) 15:20:16ID:???AuthComponentは使えない。オレオレ的な使い方がしにくい
認証後の飛び先を認証直前の画面に設定できない
だからAuth系はできるだけ単純な方がいい
AuthComponentは柔軟な拡張には向かない
0828nobodyさん
2008/03/05(水) 15:21:35ID:???> たとえば、データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい。
> ここまでは質問&答えがあったきがするけど、
> そのとき、どこか一行でもエラーがあれば全部保存しない(それはトランザクションで解決)
> で、入力エラーがあったフィールドの下にエラーメッセージを表示させる。
少なくともこれが出来たら、「既にあるもの」と認めてもいいけど?
0829nobodyさん
2008/03/05(水) 15:27:50ID:???この自作ヘルパーしなくても普通に出せるやん。
入力エラーがあったフィールドの下にエラーメッセージを表示させる。だろ?
0831nobodyさん
2008/03/05(水) 15:39:35ID:???文章が読めないのか、都合が悪い所を見ようとしないのか。
0833832
2008/03/05(水) 16:04:24ID:???複数行一括入力は俺も試したけどFormHelperつかえねーよな。
少しでも手を入れようと中身を見ると余計な機能ばっかり大量に付いてて振り払う手間の方がかかる。
粒度の感覚がないんだろうな。もっと乱暴に言うと、おもてなし精神がねえ。
わかるよね言いたいこと。
0834nobodyさん
2008/03/05(水) 16:12:26ID:???0835nobodyさん
2008/03/05(水) 16:18:08ID:???Helperの癖に、モデルに依存しまくりなんだよな。激しく意味がわからんし。
たとえば、FormHelper::createだけどこんなコードになっている。
$currentModelってなに? ClassRegistry::getObject($currentModel);ってなに?
ClassRegistryって何をするもの? レジストリってことは誰かがどこかでその名前で登録するわけ?
> is_a($currentObject, 'Model')
モデルかどうかって何でそんなの調べるの? って感じだからね。
0836nobodyさん
2008/03/05(水) 16:18:35ID:???$defaultModel = null;
$data = $this->fieldset;
$view =& ClassRegistry::getObject('view');
中略
if (empty($model) && $model !== false && !empty($this->params['models'])) {
$model = $this->params['models'][0];
$defaultModel = $this->params['models'][0];
} elseif (empty($model) && empty($this->params['models'])) {
$model = false;
} elseif (is_string($model) && (strpos($model, '/') !== false || strpos($model, '.') !== false)) {
$path = preg_split('/\/|\./', $model);
$model = $path[count($path) - 1];
}
中略
if (ClassRegistry::isKeySet($model)) {
$object =& ClassRegistry::getObject($model);
}
$models = ClassRegistry::keys();
foreach ($models as $currentModel) {
if (ClassRegistry::isKeySet($currentModel)) {
$currentObject =& ClassRegistry::getObject($currentModel);
if (is_a($currentObject, 'Model') && !empty($currentObject->validationErrors)) {
$this->validationErrors[Inflector::camelize($currentModel)] =& $currentObject->validationErrors;
}
}
}
■ このスレッドは過去ログ倉庫に格納されています