【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/
0540nobodyさん
2008/02/20(水) 10:16:32ID:???超典型的なSQLインジェクションの穴だし、たしかに低レベルだなw
ちなみにh()もhtmlspechalcharsに丸渡ししてるから、
htmlエスケープの穴も塞がれてない
0541nobodyさん
2008/02/20(水) 13:04:12ID:???笑うのは、これを穴といっている奴のことな。
たとえば、SQLインジェクションを、SQLの穴という奴はいない。
SQLを使って作った奴の問題。
世の中のRDMS用のどのライブラリ・フレームワークもSQLを直接実行できる。
だから、すべてのライブラリ・フレームワークに穴がある。といったら
馬鹿にされるぞ。
余りにも低レベルな奴だとな。
0542nobodyさん
2008/02/20(水) 22:13:50ID:???0545nobodyさん
2008/02/21(木) 00:58:38ID:???あぁ。穴といっているやつがね。
0547nobodyさん
2008/02/21(木) 01:36:27ID:???それもそだねえ
h関数も同様
少なくとも この辺りの対策はフレームワークに組み込まれるべき部分
でなければ自分で書くのと大差ないわけだし
他にもDBが外部から更新されるパターンがけっこうあるよねえ
低レベルとか言っているやつがいるが
その低レベルな穴をふさぐのもフレームワークの役目
同じことやるなら 自分で書けばいいんだしな
問題なのは 独自の変なルールくっつけているわりに
そういう部分に手抜きがあるということ
そして 手抜きがあるところもあれば きちんとしているとこもある
ようは 今のCakePHPは中途半端なのね
ZendやCIのほうが変なルールがない分 作りやすいかもねえ
できたコードも見通しいいしね
0548nobodyさん
2008/02/21(木) 01:46:39ID:???なんぼほど覚えることが増えんねん、いい加減にせーよボケ!!
0549nobodyさん
2008/02/21(木) 02:44:48ID:???それとも仕事で嫌々使わされてるクチか?
0550nobodyさん
2008/02/21(木) 08:17:06ID:???Cakeで外部キーはテーブル名単数形_id(例えばuser_id)とする、といったルールになってるけど、
例えばusersテーブルのidじゃなくて、usersテーブルのuseridをuser_idに引っ張ってきたいときは
どうしたらいいですか?
usersテーブルのプライマリキーをidからuseridに手動変更するとか?
それでもuser_idに自動的に引っ張ってこれますか?
0552nobodyさん
2008/02/21(木) 09:46:20ID:???必死だなw
これは穴とは言わない。これが穴なら他のフレームワークにもあると
何度も言われてまだわからないのかw
0554nobodyさん
2008/02/21(木) 12:43:43ID:???証明する義務は、穴があると言い出した側にある。以上。お前の頭は異常w
0555nobodyさん
2008/02/21(木) 13:06:05ID:???0556nobodyさん
2008/02/21(木) 13:10:53ID:???ちゃんと言わないと相手にしてもらえないよ。
お母さんに教えてもらわなかった?
0557nobodyさん
2008/02/21(木) 13:22:36ID:???今必死にファイル検索中・・・・
見つからなかったから遠吠え↓
0558nobodyさん
2008/02/21(木) 14:57:01ID:???ただの煽りあいでどっちも荒らしにしか見えませんよ。
0559nobodyさん
2008/02/21(木) 19:07:43ID:9HKLO2wF複数のお店が複数のアイテムを販売し、不特定多数のユーザーがそのアイテムを
「お気に入り」に入れる。で、ユーザーがお気に入りを閲覧した時に
アイテム一覧では無く、お店一覧を出したい場合どうしたら良いんでしょうか?
補足:
お店とアイテムはhasManyでアイテムからお店はbelongsToな関係で、
ユーザーとお気に入りはhasOneでお気に入りからユーザーはbelongsToな関係
お気に入りにはアイテムのIDとユーザーのIDが記録されている。
お気に入りとアイテムはhasManyもしくはHABTM(まだこれを使う意味が分かってません)
これら四つのテーブルに対するモデルは作成済み
SQL的に言うと
SELECT * FROM companies
WHERE id IN (
SELECT company_id
FROM items
WHERE id IN (
SELECT item_id
FROM favorites
WHERE user_id = '$this->User->field()で取り出したusersテーブルのID'
)
)
SQLで書くとこれだけですむ問題なのですが、
うまくデータを引き出せず、かといってFavoriteモデルから取り出した後でforeachで
Companyの情報を取り出すといった事はやりたくないですし。。
どなたかご教授頂けないでしょうか。
0560nobodyさん
2008/02/21(木) 20:12:27ID:???なんだから手っ取り早くやるなら
User->Favorite->recursive = 2;
User->Favorite->findAll('user_id = '.$userID);
でいいんじゃないの
ていうかユーザーとお気に入りがhasManyでお気に入りとアイテムがhasOneな
気がしないでも無いけど
0561nobodyさん
2008/02/21(木) 20:13:15ID:???ざっと読んで答えるが、
お気に入り->アイテム->お店
ってアソシエーションも逆から設定しておけばいいんじゃないの?
お気に入りをテーブルから取り出したら、芋づる式に取り出せるように。
0562nobodyさん
2008/02/21(木) 20:15:21ID:???アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
0563nobodyさん
2008/02/21(木) 21:06:15ID:9HKLO2wF>アイテムがお気に入りをhasManyでお気に入りがアイテムにbelongだ
レスありがとうございます。確かにお気に入り、アイテムの関係でみるとそうなりますね。
ただお気に入りにはアイテムのIDが当然格納しているので当然belongsの設定が出来ますが、
アイテムにはfavorite_idは持ってないのですが、hasManyの設定って出来るものなのですか?
後データとして取得したいのは$data[*]['Company']という形なのですが
教えて頂いた方法を実践したとしても$data[*][Item]['Company']という形になりませんか?
だとすると受け取ったCompanyデータは重複する可能性がありますのでその辺制御してやらんと
駄目だと思うのですが、間違ってますでしょうか。
関係ないのですが
$this->User->Favorite->findAllって書き方出来るのですね。初めて知りましたorz
0564559
2008/02/21(木) 21:11:32ID:???0565nobodyさん
2008/02/21(木) 21:33:52ID:???あとどういうデータで返って来るかは自分でdebug($data);でも書いて確認するんだ
気に入らない形だったら自分で整形しろ
それで得たノウハウはここか自分のブログにでも書けばみんなしやわせ
0566nobodyさん
2008/02/21(木) 23:04:08ID:???0567nobodyさん
2008/02/21(木) 23:22:30ID:???というか引っ張り出すデータを軽くしたい時はそうしてる。
0569559
2008/02/22(金) 01:11:47ID:???>566
私もイラっと来てquery使おうとしてたんですが、ページングしたかったので
とりあえず今はpaginateにWHERE句の後ろ全部渡す形にしちゃってますorz
皆様どうもありがとう。
0570nobodyさん
2008/02/22(金) 01:16:58ID:???>567
設計上可能ですし私もそれ考えたのですが、
なんかそれをやると負けた気がして迷走してましたw
0571nobodyさん
2008/02/22(金) 01:31:38ID:???正しいか分からんけど、ロジックシンプルになるし、データも少なくなるしそれでいいんじゃん?
あとはmysql(ver5.1以上)のviewを使うのもありかもね。
0572nobodyさん
2008/02/22(金) 05:41:42ID:???CakePHPのアソシエイト部分が小規模向けに設計されてる
GoogleCodeSearchで中規模程度のソースを結構見たが
大規模化するとかアソシエイト部分が、かなり複雑になっていて
とてもチーム分担できるようなソースでは無くなっている
symfonyはここが簡潔でわかりやすい
0573nobodyさん
2008/02/22(金) 09:25:21ID:???だからCakePHPでアソシエイトを使わなければいいだけの話。
0575nobodyさん
2008/02/22(金) 11:55:57ID:???CakePHP的にはどうするのが一番いいの?
モデルからコンポーネントを無理やり使う?
ビヘイビアってライブラリというよりか
フックを入れるものだからちょっと感じが違うよね。
0576nobodyさん
2008/02/22(金) 12:22:47ID:???0577nobodyさん
2008/02/22(金) 13:09:39ID:???たとえば、ファイル読み書きライブラリを使うとして、
$handle = $model->fopen($file)
$model->fputs($handle, $data);
とか気持ち悪いとか思わない?
継承関係になってないんだよね。
$model->findAll (このモデルのデータを検索する)
$model->save (このモデルにデータを保存する)
$model->fopen (このモデルとは関係ないが、ファイルをオープンする)
$model->fputs (このモデルとは関係ない、ファイルに保存する)
0578nobodyさん
2008/02/22(金) 13:47:10ID:???ファイルの読み書きだったら一個モデル作ればいいんじゃね?
モデルってデータの入出力であってモデル=DBのテーブルってわけでもないし
0579578
2008/02/22(金) 14:02:56ID:???0580nobodyさん
2008/02/22(金) 14:48:32ID:???今回はファイルを例にしたけど、
そういう汎用的なライブラリって使うでしょ?
そういうのはどうやって使うのがCakePHP的なのかなぁって。
vendersに入れるってことは、
vendor('aaa/bbb');
class MyModel extends AppModel {
function foo() {
$lib = new Lib();
}
}
こんな感じで使うってこと?
0581nobodyさん
2008/02/22(金) 14:58:48ID:???コンポーネントいらないんじゃね?と思えてきた。
コンポーネントは何の為に使うんだろう?
呼び出したコントローラを参照する必要がある場合?
すると汎用的なライブラリはvendorを使ったほうがいいのかな。
たとえばメール送信(1.2のEmailComponent)は
コンポーネントではなく、vendorにするべきじゃないかと思えてきた。
バックグラウンド的にモデルに変更があったらメールするなんて用途もあるだろうし。
そういう場合でもモデルを変更するコントローラで一旦変更を感知して
そこからメールするのがいいのだろうか?
0582nobodyさん
2008/02/22(金) 15:02:32ID:???vendorsプロパティがほしいな。
class My extends ? {
var $vendors = array('Aaa', 'Bbb', 'Ccc');
function foo() {
$this->Aaa->foo();
}
}
あとpluginsってフォルダを使っている例を見たことが無い。
0583nobodyさん
2008/02/22(金) 16:17:35ID:???それがめんどくさいなら無節操にvendors使えばいいだろ
0586nobodyさん
2008/02/22(金) 18:13:20ID:???0587nobodyさん
2008/02/22(金) 19:13:52ID:???モデルでコンポーネントを使うという意味?
でも、フォルダからしてコンポーネントはコントロールの下にあるし、
なによりモデルでコンポーネントを使う方法が無いでしょ?
App::importで強制的に読み込むしかない。
0589nobodyさん
2008/02/23(土) 09:31:23ID:???将来性無いなと判断する決め手になった
後はデータがオブジェクトじゃなくて配列処理してるとこね
これも、かなり小規模を前提として設計してるよね
0590nobodyさん
2008/02/23(土) 09:40:42ID:???PHPフレームワーク主流になると思う
有名どころの大手ならCakePHPはいれない
これは断言できる、
少人数、小規模設計だから当然
半年くらいCakePHPでコーディングしてきたけど捨てるよ
CakePHP指定の案件が将来望めない
symfony案件が増加するのは間違いない
0591nobodyさん
2008/02/23(土) 10:34:07ID:???http://cakephp.seesaa.net/article/31425210.html
0592nobodyさん
2008/02/23(土) 13:14:45ID:???だね
途中荒らしてるやついたが
なんであんなに必至なのかな
まあ初心者には簡単だしおすすめだけど
cakephpのサイト探すと穴空いたままで公開してるとこ多いな
0593nobodyさん
2008/02/23(土) 14:17:27ID:???0595nobodyさん
2008/02/23(土) 14:22:47ID:???$db =& ConnectionManager::getDataSource('default');
$db->query('select * from table', false); ←二つ目の引数はキャッシュを使わないという意味
0596nobodyさん
2008/02/23(土) 16:47:47ID:???そりゃ単に調査不足だろ
0597nobodyさん
2008/02/23(土) 21:18:01ID:???何かやり方間違ってますか?
例えば
配列を書いたファイル:data.php
<?php
$hoge = array( "a", "b", "c" ) ;
コントローラ:users_controller.php
<?php
include_once( "data.php" ) ;
class UsersController extends AppController
{
var $name = "Users" ;
var $uses = array( "User" ) ;
function index()
{
global $hoge ;
var_dump( $hoge ) ;
}
}
0598nobodyさん
2008/02/23(土) 22:31:22ID:???たとえるなら、携帯の掲示板レベル
0599nobodyさん
2008/02/23(土) 22:33:28ID:???そうなればsymfonyが敵なし状態だろうな
0600nobodyさん
2008/02/23(土) 23:06:46ID:???0601nobodyさん
2008/02/24(日) 14:48:47ID:???チンポニーでも禅度でも好きなの使え。
0602nobodyさん
2008/02/24(日) 21:59:28ID:???0603nobodyさん
2008/02/24(日) 23:00:15ID:???0604nobodyさん
2008/02/25(月) 04:09:58ID:???xmlの処理ってどこで実装するのが良いの?
viewにべた書きは嫌なんだけど
0605nobodyさん
2008/02/25(月) 11:49:58ID:???0606nobodyさん
2008/02/25(月) 17:42:18ID:6F5pnXqdMVCの奥でデザインパターンみたいな構造にしたいんですけど。
0607nobodyさん
2008/02/25(月) 20:05:46ID:???0608nobodyさん
2008/02/25(月) 20:18:02ID:???URL/データ/データ
このような感じでデータだけを送ることはできませんか?
0611nobodyさん
2008/02/26(火) 00:24:55ID:???>>610
アドバイスありがとうございます。
http://hogehoge/sales/1
というページから、
http://hogehoge/sales/1/2008/02
みたいにフォームを利用してさらに期間を絞り込むようなことをやりたかったのですが、
結局新しい別のビューでやることにしました。
0612nobodyさん
2008/02/26(火) 12:54:22ID:???vendor?
0613nobodyさん
2008/02/27(水) 10:41:56ID:pFPJf0/n0614nobodyさん
2008/02/27(水) 12:51:45ID:???$model->readを実行すると、$model->data に読み込んだデータが入る。
$model->findByIdだと$model->dataの値はそのまま。
確認したし、多分あっていると思うが、
これの違いを明確に書いてあるところあるかな?
0615nobodyさん
2008/02/27(水) 13:12:36ID:???1.2しか知らないけど
controller
$this->set('hoge','aiueo');
view
echo $hoge;
0616nobodyさん
2008/02/27(水) 13:30:21ID:pFPJf0/nすいません。間違えました。
コントローラからヘルパーにパラメータをわたす方法でした。
0617nobodyさん
2008/02/27(水) 15:08:46ID:???ソース見たまんまだけど
0620nobodyさん
2008/02/27(水) 17:54:15ID:???ヘルパー
function test($hoge){
echo $hoge;
}
コントローラー
$this->set('hoge','てんこもり');
これでとりあえずビューにわたるだろ?
んで、ビューからヘルパーを呼ぶと。
$helper->test($hoge);
こんで $hoge の内容が表示されますよっと。
0621nobodyさん
2008/02/27(水) 19:02:44ID:???<?php $helper->init($settings); ?>
初期化命令を毎回呼べと?
0622nobodyさん
2008/02/27(水) 19:23:49ID:???ってビューに渡しておいてビューの頭で
$helper->settei($settei);
ってヘルパーに渡してるよ俺の場合
なんかバカっぽいけど。
App::import('Helper', 'MyHelper');
$myhelper = new MyHelper();
$myhelper->settei($settei);
$controller->set('myhelper', $myhelper);
なら渡せないことも無かったけど、MyHelperの中でHtmlHelperやFormHelper呼ぼうとしたら
自動でうまく呼び出せなかったからやめた
MyHelperの中で$this->Html = new HtmlHelper();とか手動でやってやればよかったのかな
そのときは思いつかなかったからやってないけど
0623nobodyさん
2008/02/27(水) 20:00:22ID:pFPJf0/n自己解決しました(笑)
0624nobodyさん
2008/02/27(水) 20:01:37ID:WlN8JrV2それぞれの印象を聞いてみたいです。
俺もCakePHPを使い始めた当初からSmartyを使ってきてる一人なのですが、なんだか
実は結構めんどくさかったりする割に従来のPHP記述でのビューに比べてあんまり
パフォーマンス良くない気がしてきたもので。(例えば、ヘルパーに配列を渡す場合
Smartyでのビューだと細々とめんどくさかったり)
0625nobodyさん
2008/02/27(水) 20:29:10ID:???0626nobodyさん
2008/02/27(水) 21:24:24ID:WlN8JrV2なに?おれおれフレームワークって?
知り合いがZend FrameworkのMVC(この場合はV)をCakeで使ってたけど、あれは意味ねえなあ
0627nobodyさん
2008/02/27(水) 21:25:22ID:pFPJf0/n家に帰るのでIDかわるから、あきらめて説明すると、
コントローラで
$this->params['hoge'] = $data;
に値設定。
ヘルパーからも、$this->params['hoge']にアクセスできる。
$this->paramsを受け渡しに使うのってどうよ?と思うかもしれんが、
paginationもにたように、params['paging']を使っているからいいだろう?
他にClassRegistryを使ったやり方があって、FormHelperとかは
これを使っているみたいだが、なんかグローバル変数あつかっている感じがして却下。
もう一つ、Viewを継承した独自のビューでごちゃごちゃ変数わたしても
できるかもしれんが、余計なものを作らないといけないので却下。
0628nobodyさん
2008/02/27(水) 21:49:42ID:???0629nobodyさん
2008/02/28(木) 02:37:50ID:???$model->findAll()するとき、有無を言わさずjoinしてるみたいなんだけど
これってなんとかならんのかね。
railsだとfind(:all,:include = ...)で指定したときだけjoinとかするじゃん。
0632nobodyさん
2008/02/28(木) 15:35:27ID:???0634nobodyさん
2008/02/28(木) 20:45:21ID:???0635nobodyさん
2008/02/29(金) 08:40:00ID:???時間の無駄やろ。
0636nobodyさん
2008/02/29(金) 08:42:38ID:???頭のいい人間が少人数しかいないから
正しい方向に行くのは常に少人数
0637nobodyさん
2008/02/29(金) 09:13:18ID:???主流になっている罠w
0638nobodyさん
2008/02/29(金) 09:16:04ID:???■ このスレッドは過去ログ倉庫に格納されています