【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/
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;
}
}
}
0837nobodyさん
2008/03/05(水) 17:38:57ID:???モデルは乗ってるんだけど、コントローラーのやり方がいまいちわからない。
このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。
・・・願ってます。
0838nobodyさん
2008/03/05(水) 18:30:03ID:???こいつが書く文章だけ、やけに読みにくい
データベースの一行だけでなく、複数行をいっぺんに表形式で入力したい
コミュニケーション能力無いやろ?
0840nobodyさん
2008/03/05(水) 18:58:46ID:???認証後の飛び先だけ自分でコントロールすればいいだけじゃねの?
認証後の飛び先を認証直前の画面に設定ぐらい楽勝
その程度でオレオレ的っていうのか、しらんが
0842nobodyさん
2008/03/05(水) 19:41:00ID:???この説明"すら"理解できないの?
0843nobodyさん
2008/03/05(水) 19:45:29ID:???0844nobodyさん
2008/03/05(水) 20:17:33ID:???理解が出来る出来ない問題じゃなくて例えが悪すぎるよな
こういやつの書くコードは、どういうコード書くかなんとなくわかる
自分にしかわからないコードしか書かないよな
0845nobodyさん
2008/03/05(水) 20:53:16ID:???認証にこけて認証ページにリダイレクトする前にurlをセッションに入れて
認証完了後にそのurlに飛ばせばいいだけじゃね
0846nobodyさん
2008/03/05(水) 21:02:22ID:???0847nobodyさん
2008/03/05(水) 22:44:19ID:???意味がわかんないのに、”できる”と断言しちゃうやつ。
こいつのほうがよっぽどアフォだろ。
0850nobodyさん
2008/03/06(木) 02:45:38ID:???理解能力とかより、わかりにくい文章でも度が過ぎるよな
特に>>820と>>823
普通のコミュニケーションでもよく聞き返されるやろ?
もっと簡単な文章にできないか?
密度の薄い内容のクセに長文になってんだよwww
0853nobodyさん
2008/03/06(木) 09:43:53ID:???勝手に同一人物にするなw
理解能力も無い、この程度の長文(?)も読めない、コミュニケーション能力も無い。
その上妄想で他人をあおることしかできない。
0854nobodyさん
2008/03/06(木) 09:54:29ID:???長文というか80%が駄文だし
そんな駄文を理解しようとする為に無駄なパワーを使いたくないから
もっと楽に読める内容の濃いわかりやすい文章にしろよ
0855nobodyさん
2008/03/06(木) 10:45:54ID:???YOUの部分を日本語に訳せばいいのかな。
個人的には、MVCの役割分担の考え方についてはフレームワーク自体の根深い部分だと思うから
他の人の話もききたかったりする。Cakeの実装の是非とか。
0856nobodyさん
2008/03/06(木) 11:06:31ID:???理解力が無いというより、単に実戦経験が無いのだろうな。
実戦経験があれば、表形式での入力とか、
セッションもモデルの一部じゃね?(という疑問)とか
そういうのは、これだけ書いてあっていても、あーあのことねって
わかると思うんだが。
0857nobodyさん
2008/03/06(木) 11:22:57ID:???> 誰か simpletest でコントローラをテストする方法教えてください。
コントローラのテストは少なくとも二つのやり方がある。
一つは、CakeTestCase::testAction($url, $params = array()) で
actionを呼ぶ方法。
もう一つはCakeTestCaseの代わりにCakeWebTestCaseを継承したテストクラスを作り
CakeTestCase::get(アドレス)、CakeTestCase::click、CakeTestCase::clickLinkById、
CakeTestCase::setFieldByName、CakeTestCase::clickSubmitById
CakeTestCase::assertPatternなどで、あたかもブラウザを操作しているかのごとく
ページを移動していきながらテストする方法。
> このスレに神がいたらブログにまとめてアップしてくれたらうれしいです。
まとめたいのは山々なんだが、時間が・・・。
0858nobodyさん
2008/03/06(木) 11:26:31ID:???普通のテストではテスト用のデータベース設定が使われるわけだが
(つまりtest_suite_というプリフィックスがついたテーブルを使用する)
CakeWebTestCaseはブラウザでアクセスしていることになるので、
テスト用のデータベース設定が使われない。
これじゃいろいろまずいので↓ここの記事ではCookieを設定することで対応している。
http://gignus.com/blog/posts/view/13
一方俺は、CakeWebTestCase::addHeader を利用した。
0859nobodyさん
2008/03/06(木) 15:18:52ID:???>>858
おぉ〜!神様、仏様。
ありがとうございます。
simpletestじゃなさそうですが、コントローラーはsimpletest でテストできないってことでOKでしょうか。
cakewebtestcase 見てみます!ありがとう。
0860nobodyさん
2008/03/06(木) 17:08:09ID:???駄文が多いだけで、意味のあることがひとつも書いてない
あとは自作ヘルパーの自慢?
悪いけどオナニー的な文章になってるんだよ
気づいてない?
>>856
自演乙
0861nobodyさん
2008/03/06(木) 17:14:50ID:???だろう運転と会話は事故の元
誰もが自分と同じ思考をし理解してくれるなんてありえない。
しまいには相手を馬鹿にして切り捨てる。
個別の技術的な話っていうより、文章の分かりにくさと対応がつっこまれてるんだと思うよ。
0862nobodyさん
2008/03/06(木) 17:21:49ID:???どう考えても他の人の話を聞く姿勢ではないよな!
攻撃的な姿勢でどうやって有意義な情報を聞き出すことが出来るんだよ
0863nobodyさん
2008/03/06(木) 17:30:26ID:???脳障害患者とかな!
一言で言えば嵐に近い。
最近は>>777が常駐して荒らしてるだけだから
■ このスレッドは過去ログ倉庫に格納されています