トップページ⇒php
987コメント299KB

【PHP】フレームワーク CakePHP

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/18(土) 20:53:22ID:???
おら、とうとうガマンできなくて立てちまっただ

本家
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/
0565nobodyさん2007/08/17(金) 22:34:10ID:???
beatport
https://www.beatport.com/
0566nobodyさん2007/08/17(金) 22:38:46ID:???
NTT災害伝言板サービス
https://www.web171.jp/
0567nobodyさん2007/08/17(金) 22:46:31ID:???
>>563
× インターネットバンクのサイトだと
○ インターネットバンクのサイトだと
皆無というから反例をあげてるだけでしょ。
0568nobodyさん2007/08/17(金) 22:47:04ID:???
>>567
○ インターネットバンクのサイトとかだと
0569nobodyさん2007/08/17(金) 22:56:46ID:???
>>564
えーと。それは笑えば良いのか?w
httpsといいながら、httpでもアクセスできる。
どこからか経由(たとえば検索エンジン)でhttpでアクセスして
その状態でメール・パスワード入れたら、盗聴される。

まあ、たしかにセキュリティが弱いサイトはあるだろうねwww
0570nobodyさん2007/08/17(金) 23:03:44ID:???
なんで、httpsだけを使うサイトは少ないの?
その理由がわかる人は、サイト全体をSSLにしろとはいわないね。
0571nobodyさん2007/08/17(金) 23:06:11ID:???
「なんでもいいから簡単に実現したいなら」って書いてあるじゃん
全体をSSLにしろなんてどこに書いてあるんだ?
0572nobodyさん2007/08/17(金) 23:07:34ID:???
「皆無」ってのは嘘だから反例を挙げただけだよ
嘘は良くないだろ。
別に「SSLのみにしなさい」なんて一度も言ってない。
0573nobodyさん2007/08/17(金) 23:09:39ID:???
じゃあ、SSLのみにしない方法を書けよ。
そっちが一般的だろ。
0574nobodyさん2007/08/17(金) 23:10:33ID:???
>>555はSSLのみにしない方法を望んでるんだし。
0575nobodyさん2007/08/17(金) 23:11:09ID:???
CakePHPでSSLと非SSLをまたぐ方法は
考慮されてないんじゃないのかな?
ドキュメントにも記述されてないし。
0576nobodyさん2007/08/17(金) 23:18:22ID:???
まあ皆無ってことはないわな
実際そういうサイトがクライアントに納品されるのをこの目で見てるしw
0577nobodyさん2007/08/17(金) 23:23:54ID:EqsPdypk
ログインしないと何も出来ないような仕様のサイトだと、
SSL限定でもいいんじゃね?って話になっちゃうんだよねえ。
それでいいならその方が実装楽だし。
0578nobodyさん2007/08/17(金) 23:26:18ID:???
おまいら質問と関係ない話題で盛り上がるなよ
0579nobodyさん2007/08/18(土) 03:13:03ID:???
ウェブアプリケーションセキュリティ
ttp://www.jumperz.net/was.jsp
の5章セッション管理「HTTPとHTTPSが共存する場合のセッション管理」
に対策らしきものはかいてある。
Cakeに限らずそのあたり対策を実装しているフレームワークってあるの?
0580nobodyさん2007/08/18(土) 03:29:47ID:???
ヤフオク、楽天、Amazon、etc ほとんどのサイトは
httpとhttpsが共存しています。
有名どころでhttps限定なんてサイト見たことがありません。
0581nobodyさん2007/08/18(土) 08:20:23ID:???
「有名どころがSSL限定だ」なんて誰か書いたのか?
0582nobodyさん2007/08/18(土) 09:34:37ID:???
>>581
しつこすぎ
0583nobodyさん2007/08/18(土) 09:51:18ID:???
こんなんじゃダメ?
http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=123&forum=3&move=prev&topic_time=1162418620
0584nobodyさん2007/08/18(土) 10:09:37ID:???
>>583
そのリンク先のリンク先を見ると、
SSLActionsで指定されたページをSSLページにするような
コードが掲載されているようだね。

つまり、CakePHPにはそういう機能が無いということになるのか。
単にhttpsのアドレスにリダイレクトしているだけみたいだけど、
ちゃんとセッションの引継ぎと>>555で示された
2つのcookieを使ったセキュアな移動をしているのか?
0585nobodyさん2007/08/19(日) 00:48:53ID:SGQG+hwq
ケースバイケースで書くようなことだから、FWで実装って言ってもなあ。
たいした量のコードにならないから自分で書いてみればいいんじゃないの。
secureな方のcookieにhttpのsession id情報持たせておけば基本的に終わりじゃん

0586nobodyさん2007/08/19(日) 09:08:19ID:???
CakePHPを使ってたらEthnaを使うのがアホらしくなってきたわ
0587nobodyさん2007/08/19(日) 12:03:31ID:???
>>585
> secureな方のcookieにhttpのsession id情報持たせておけば基本的に終わりじゃん
違うぞ。セキュリティの勉強をしたほうがいい。

Amazonとかみればわかるように、商品をカートに入れるまではhttp
そのあと会計時はhttps。つまり一連の処理がhttpsだけで完結する処理ではない。

セキュアな方のクッキーにセッションIDを持たせた場合、
それをhttpで送ると盗聴されセッションハイジャックできてしまう。

だからhttp用ととhttps用と二つのセッションIDを使用することになる。
そしてサーバー内でその二つを紐付けしておかなければならない。
もちろんhttp用セッションIDは盗聴される可能性があるから
それを奪われても、その情報だけからhttps用セッションIDを取得できてはいけない

こういう複雑で汎用的な仕組みは、フレームワークレベルで実装されるべきものだ。
0588nobodyさん2007/08/19(日) 12:15:56ID:???
>>587
よくぞいうた!えらい!
0589nobodyさん2007/08/19(日) 15:10:14ID:TluxcOv3
>>587
はあ?セッションidが別なの前提で書いてるのだが?
全然難しくないだろ。お前が勉強しろ
0590nobodyさん2007/08/19(日) 19:46:17ID:???
>>589
だから? 別だと>>587のように複雑になる。
0591nobodyさん2007/08/20(月) 00:21:09ID:???
全然複雑じゃないだろw
0592nobodyさん2007/08/20(月) 00:27:51ID:???
まさに売り言葉に買い言葉の連続
0593nobodyさん2007/08/20(月) 00:28:08ID:???
それで、具体的にどうやってるんだ。
0594nobodyさん2007/08/20(月) 00:31:32ID:???
複雑じゃないというのなら答えてみろよ。
0595nobodyさん2007/08/20(月) 00:41:36ID:???
それよりも
>Amazonとかみればわかるように、
別にAmazonは cookie専用じゃないよ。
0596nobodyさん2007/08/20(月) 01:01:34ID:???
すまん。
たったいま
http://cakephp.org/screencasts/view/3
を見たんだが、Editが追加になってるし、最後AllDoneって言ってる割にindex.thtmlの中に/blog/へのリンクが残ったままとか問題ありまくりなんだが、これ公式なのか?
0597nobodyさん2007/08/20(月) 03:57:31ID:???
>>595
誰がクッキー専用って言ったんだよw
いい加減あきらめろ。見苦しいぞ。
0598nobodyさん2007/08/20(月) 04:19:47ID:???
いつまでやってんだ
0599nobodyさん2007/08/21(火) 00:38:42ID:jv21ywgR
で、結局どなったの?
0600nobodyさん2007/08/21(火) 22:50:35ID:???
普通に簡単に出来るのをわからないで、粘着してるだけだと思う
0601nobodyさん2007/08/21(火) 23:28:41ID:???
>>600
またわかりやすい煽りだなw 答えられないのなら来なくていいよ。
0602nobodyさん2007/08/22(水) 00:38:46ID:???
フレームワークってものがよくわからない。
レン鯖の自分のスペースに置いて使えたり…する?
0603nobodyさん2007/08/22(水) 01:30:49ID:???
初心者スレに戻りましょう
0604nobodyさん2007/08/22(水) 19:44:09ID:???
初心者スレから帰ってきました
0605nobodyさん2007/08/22(水) 19:57:55ID:HCjV3CA1
どうぞ初心者スレでの成果を発表して下さい
0606nobodyさん2007/08/22(水) 21:25:23ID:???
>>605
初心者スレに行きましょう
0607nobodyさん2007/08/24(金) 11:52:50ID:???
>>596
パッと見てみたが、
>Editが追加になってるし
addではなく、ちゃんとeditになっているようだけど。
>index.thtmlの中に/blog/
ルートが/blog/なので無問題。
0608nobodyさん2007/08/25(土) 20:52:05ID:???
表紙を見るとどうやらCakePHPのことが書いてあるもよう。
内容は読んでないよう。
http://www.amazon.co.jp/dp/4896273567
0609nobodyさん2007/08/27(月) 01:15:59ID:???
>>608
その本どうしようかなぁ?
マニュアルのコピペとか言われてるけど
漏れがちょうど習得したいフレームワークはその3つやし
購入しようかどうかカナーリ迷う。
特にsymfonyはわかりやすい日本語マニュアルが少なく
他のフレームワークに比べて出来る事も多いが異常なまでにランニングコストが高いから
コピペでもわかりやすく書いてれば非常に助かるんだがね。
0610nobodyさん2007/08/27(月) 03:02:22ID:???
ランニングコストとかいうやつには丁度いいレベルの本だよ
0611nobodyさん2007/08/27(月) 09:23:46ID:???
>>610
そうそうオマエみたいな馬鹿には丁度いい本と思われw(ワラ
0612nobodyさん2007/08/27(月) 10:38:23ID:???
>>609
立ち読みしてみたら?

俺は立ち読みして買わないことに決めたけど。
0613nobodyさん2007/08/27(月) 11:02:16ID:???
珍しくまともなアドバイスを見た気がする
0614nobodyさん2007/08/27(月) 11:03:59ID:???
俺は立ち読みして買うことを決めた。
結構いい本だよ。日本語資料は少ないからね。
0615nobodyさん2007/08/27(月) 11:16:00ID:???
>>613
珍しく、一発でわかる自作自演を見た気がするw
0616nobodyさん2007/08/27(月) 16:22:48ID:ijRbnoqf
フレームワーク触ってても、OOPしてるなぁって気持ちにならないよね。
モジュールを作る作業のみ。
OOPしてぇなぁ。
でもこの快感(フレームワークでの開発)を覚えると、めんどうなんだよな。はぁ。
0617nobodyさん2007/08/27(月) 18:03:28ID:???
よっぽど簡単なことしかしてないんだな
0618nobodyさん2007/08/27(月) 18:05:08ID:???
よっぽど凄い物をお作りなんでしょうな。
0619nobodyさん2007/08/27(月) 18:09:56ID:???
いえいえあなたこそ
0620nobodyさん2007/08/27(月) 18:11:34ID:???
>>618
よっぽど簡単なことしかしてないんだな
0621nobodyさん2007/08/27(月) 18:13:52ID:???
ぶっちゃけ使ったことないんです、えらそうにしてスイマセンでした。
0622nobodyさん2007/08/27(月) 18:14:42ID:???
CakePHPにかぎらず、フレームワークを使った開発でOOPは使わない。

だってさ、ビジネスロジックなんて単純な作業の塊だぜ?
継承とか使わないとやれない作業なんて存在しないよ。

オブジェクト指向なJavaだってさ、継承ごてごてで
使いづらくなったEJBを改め、POJOといって
継承を使わない(必須ではない)ただのクラスを使い始めた。
それでいいんだよ。シンプルでわかりやすい。

というわけで、OOPはフレームワーク自体を作るものだと思っています。
0623nobodyさん2007/08/27(月) 18:45:34ID:???


      結論:たいていの場合、OOPはフレームワーク自体を作るものである。

0624nobodyさん2007/08/27(月) 19:04:08ID:???
むしろPHPerな俺としては、なぜJAVAであんなにも継承が必要だったのかが知りたい
0625nobodyさん2007/08/27(月) 19:32:33ID:???
継承を使わないからPOJOってわけではないと思うが・・・
0626nobodyさん2007/08/27(月) 19:34:09ID:???
>>624
それは突き詰めると型あり言語というものは
そういうものだからということになるんじゃないかな?

型あり言語の場合、コンパイル時に名前解決しちゃうから
名前間違いによるバグをコンパイル時に発見できる。
そして速いというメリットがある。そしてJavaは型あり言語。

その型あり言語の通常のやり方でやると、Controllerを作ろうとした場合
index,add,edit,viewなどの関数は基底クラスもしくはインターフェースを
オーバーライドすれば良いけど、そのほかの独自の名前の関数はフレームワークは
知らないから呼び出せない。それを呼び出すためにフレームワークに知らせる必要がある。
そのための処理や設定XMLファイルが・・・という感じなのだろう。

POJOはリフレクションという機能(関数群)を使ってオブジェクトにある関数を調べて
それを呼び出すことで継承なしに上手いことやっているわけだけど、
それは型あり言語のメリット(コンパイル時にバグ発見、速い)に反するものだった。

リフレクションはどちらかといったら開発・デバッグのための関数であり、
それを通常の処理に使用するという考えは長いこと禁断のテクニックだった気がする。
0627nobodyさん2007/08/27(月) 20:30:28ID:???
突っ込みどころ満載だけど、突っ込んだら負けゲームなんだろな・・・
0628nobodyさん2007/08/27(月) 20:55:57ID:???
突っ込んでら、これがコテンパンに突っ込み返すから、
当然お前の負けだろうなw
0629nobodyさん2007/08/27(月) 20:56:37ID:???
突っ込んだら、おれが
0630nobodyさん2007/08/27(月) 21:22:08ID:???
>>629
遠慮せずに入れてみろよ
0631nobodyさん2007/08/27(月) 21:27:01ID:???
>>627
そのセリフを言った時点で、突っ込んでも、突っ込まなくても、負けだ。
0632nobodyさん2007/08/27(月) 22:13:05ID:???
今日はこのスレ勢いあるな
もまえらオナニーでもしたのかい?
0633nobodyさん2007/08/28(火) 02:04:49ID:???
このスレのレベルの低さでPHPやめて正解だったと再認識。
0634nobodyさん2007/08/28(火) 02:18:55ID:???
>>633
いまなにやってんすか
0635nobodyさん2007/08/28(火) 02:37:25ID:???
Rubyです
0636nobodyさん2007/08/28(火) 09:03:23ID:???
2ちゃんねるをみて判断w
0637nobodyさん2007/08/28(火) 12:42:40ID:???



        ぶっちゃけ、CakePHPは、難しいと思ってましたが、やっぱり難しいです。orz

0638nobodyさん2007/08/28(火) 12:49:12ID:???
あるものを作るのに、フレームワーク使うと、そのフレームワーク自体について調べる事が多くて嫌になるよね。

一回慣れちゃえばいいんだろうけど、次の案件でまた使わない、で忘れる。
0639nobodyさん2007/08/29(水) 11:47:30ID:???
俺のフレームワーク初体験はCakeに捧げたけど…
「難しいからできない」っていうのは、先入観とかでとっつきが悪いのが大半なんだろう
0640nobodyさん2007/08/29(水) 12:31:12ID:???
Cakeは難しいが、がんばってる俺

function beforeFilter()
{
$this->checkSession();
}

あれ、今日は、動く。 なぜだろう? 
0641nobodyさん2007/08/29(水) 13:54:30ID:???
>>636
再認識だといってるだろ。
0642nobodyさん2007/08/29(水) 14:16:01ID:???
SQLで 「name LIKE $word1 AND name LIKE $word2」
のような場合、
findAllなどのconditionにはどのような配列を書けばいいのでしょうか?

array('name' => 'like '.$word1,'name' => 'like '.$word2)
だと当然のように配列は上書きされてしまいます。

宜しくお願いします
0643nobodyさん2007/08/29(水) 14:25:29ID:???
>>642
http://api.cakephp.org/class_model.html#63ade7d3c6d03c83ab53a224e23ad9dd
Parameters:
mixed $conditions SQL conditions as a string or as an array
0644nobodyさん2007/08/29(水) 14:48:27ID:???
>>643
findAll("name LIKE $word1 AND name LIKE $word2")
と書いて良いと言う事ですよね。

ありがとうございました。
0645nobodyさん2007/08/29(水) 16:08:03ID:???
先ほど質問したものですが、

テーブルAに対してhasOneで定義したテーブルBと
テーブルBに対してbelongsToで定義したテーブルCがあるときに、

$this->テーブルA->findAll("テーブルA.name LIKE $word OR テーブルC.name LIKE $word")
のように一括では取得はできないのでしょうか?

これで作成されるSQLを確認すると、テーブルCがJOINされていないようです。
0646nobodyさん2007/08/29(水) 16:10:52ID:???
聞く前に自分で調べろ
0647nobodyさん2007/08/29(水) 16:37:13ID:???
PHPフレームワーク完全マスター―PHP5.2.3PHP4.4.7対応 (単行本)
http://www.amazon.co.jp/dp/4896273567

のレビュー。CakePHPのところしかよんでない。約120ページ
CakePHP 1.2.0.5146alphaが対象

なんでもそうな気がするが、すでにガシガシやっている人には必要ない。
内容はわかりやすく広く説明している感じかな。

同作者(佐久嶋ひろみ さん)による別の本、「JavaScriptを書かないAjax」でも
書いているAjaxヘルパーの説明が多め(約30ページ)

1.2対象なのでFormヘルパーについて説明してある。(1.1ではHtmlヘルパーでやってた)
ほんの8ページだが、Formヘルパーでこんなコードを書くと、こんなHTMLが生成され、
POSTするとこういうデータが送られるって説明が良かった。
あとはHtmlヘルパー3ページ
0648nobodyさん2007/08/29(水) 16:38:25ID:???
つづき

postConditionsメソッドを知った。便利そう。
ってCakePHPの公式リファレンス(の日本語版)にものってるじゃん。見落としてたwww

scaffoldの説明は少ない。scaffoldマジックはネットで見てあきてるので
これはこれでいいかと。

アソシエートの説明が・・・ない!? いやまさかな・・・ゴクリ
しょっぱなから$useTable=falseで進めていくし、ひろみちゃんデータベース嫌いだろ?w
まあ、データベース使わないphpスクリプト作ってる人向けということで・・・

bake.phpのメッセージを解説している。英語が苦手ならどうぞ。

Validationの説明はあるのだが、1.2から強化された内容、
ユーザー定義のバリデーションの説明は(たぶん)無い。残念。

アクセス制限は独自DBを使った簡易なもの。ACLコンポーネントを使っていない。

サニタイズ・セッション・キャッシュ・コンポーネント・プラグイン・エレメントの
説明が数ページずつ。

最後に、間違っていたらごめんよ。
0649nobodyさん2007/08/29(水) 16:59:03ID:???
>>646
失礼しました。

今回は
$this->テーブルB->findAll("テーブルC.name LIKE $word")
$this->テーブルA->findAll("テーブルA.name LIKE $word OR テーブルB.id IN $id")
と2回問い合わせることにします。
0650nobodyさん2007/08/29(水) 17:32:51ID:???
>>649
recursiveで設定するんじゃないのか?
まだ使ったこと無いけど

それから、その書き方じゃSQLインジェクションの
脆弱性になるんじゃないのか?まだ検証して無いけど
0651nobodyさん2007/08/30(木) 00:25:48ID:???
>>649
手前味噌で申し訳ないですが
http://hogepiyo.net/archives/25

何かツッコミあったらお願いします
0652nobodyさん2007/08/31(金) 18:22:39ID:7m08yu49
indexアクションに、$this->render('index','test'); 追記して、
test.thtmlは blog/posts/index で呼ばれて出力してるのですが、
test.thtmlの中のindex.thtml部分が呼び出される部分にエラーがでます。

Notice: Undefined variable: posts in C:\xampp\htdocs\blog\app\views\posts\index.thtml on line 14

14 <?php foreach ($posts as $post): ?>

どうすれば出力されるでしょうか?
06536522007/08/31(金) 18:26:08ID:???
test.thtml は、 /app/views/layouts/ の中に置いてるファイルです。
index.thtml は、views/posts/ の中に置いてるファイルです。
0654nobodyさん2007/08/31(金) 18:51:11ID:???
postsっていう変数が定義されてないか
そのスコープにないんだろ
それ以上はソースを見ないとそれだけの情報では分からん
06556522007/08/31(金) 19:43:09ID:???
>>654
■controllers/posts_controller.php

function index()
{
$this->render('index','test');
$this->pageTitle = 'Postsのindexの表示';
$this->set('posts', $this->Post->findAll());
}

■views/layout/test.thtml
<?php echo $content_for_layout ?>

こんな感じで、内容はチュートリアルのに追記して、実験をしています。
よろしくおねがいします。
0656nobodyさん2007/08/31(金) 20:18:39ID:???
とりあえずrenderを最後に呼べ
06576522007/08/31(金) 20:40:55ID:???
>>656 ありがとうございます。 あっさりできますた
0658nobodyさん2007/09/04(火) 11:58:33ID:???
こういうユーザー情報テーブルが合ったとしてさ、
id,name,pass,last_login_date

※last_login_dateは、このユーザーが最後にログインした日。


こういうユーザー情報設定画面Viewがあったとしてさ、
name:[   ]
pass:[   ]

last_login_dateはユーザーが最後にログインした日を
記録するわけだから、ユーザーがデータを入力するわけじゃなく
システムが入れるわけなんだけどさ、

コントローラでのセーブがこういう風になっていた場合さ、
$this->User->save($this->data)


ユーザーがHTMLを改ざんしてlast_login_dateを
送り込んできたら、やっぱりlast_login_dateは修正できちゃうよな・・・?

そういう場合どうすんの? $this->dataから
last_login_dateにあたる変数をunsetすればいい?

ユーザーがHTMLを改ざんして違うidを送り込んでくることもあるから
そこら辺のチェックも必要だよな・・・。
0659nobodyさん2007/09/04(火) 12:56:26ID:???
作り方によるだろ。
その画面で必要な項目だけをdataにひとつずつ入れてsaveするように書けば
それ以外の項目は修正できないし。
0660nobodyさん2007/09/04(火) 12:59:46ID:???
ヒント:save()の第3引数はホワイトリスト
0661nobodyさん2007/09/04(火) 13:41:52ID:???
>>659
そりゃそうなんだけど、bakeでできるのがこういうコードだし。

>>660
なるほど、そんな引数があったのね。
0662nobodyさん2007/09/04(火) 14:43:45ID:???
データベース上にどんなテーブルがあるか調べる方法、
またそのテーブルがどんなフィールドを持っているかを調べる方法、
SQLを直接発行する以外にありますか?

たとえばMySQLの場合DESCRIBEでわかるのですが、
これだとMySQLに依存してしまいますし、
CakePHPで共通に使えるやり方があるかもと思って質問しました。
0663nobodyさん2007/09/04(火) 15:22:54ID:???
基本テーブル情報やカラム情報等の
メタデータ取得の仕方はDBによってまちまち

DESCRIBEのようなカラム情報取得の抽象化だけなら
わりとサポートしてるDBのライブラリは多いが
CRUDのSQL+カラム情報取得以外の
DBのschema操作まで抽象化したライブラリってのはあまりない

PEARのMDB2ならそういう操作を抽象化した
モジュールがあるのでその要件は満たせると思う
cakeは使ってないので知らん
0664nobodyさん2007/09/04(火) 15:35:07ID:???
聞く前にAPIを自分で調べろ

http://api.cakephp.org/class_model.html#9da1765e8d0756853d5e66b5c4e18159
0665nobodyさん2007/09/04(火) 16:44:44ID:???
>>663
> CRUDのSQL+カラム情報取得以外の
> DBのschema操作まで抽象化したライブラリってのはあまりない
でもbake.phpでは、データベースで定義されたテーブル情報から
どのテーブルのModelを作成しますか?って聞くわけで
方法あると思うんだけど。

>>664
それはモデルのAPIでしょ?

モデルで使っているテーブルの情報なら取れるかもしれないけど、
ほしいのはデータベースにどんなテーブルがあるかなんですよね。
■ このスレッドは過去ログ倉庫に格納されています