【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/
0591nobodyさん
2007/08/20(月) 00:21:09ID:???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/へのリンクが残ったままとか問題ありまくりなんだが、これ公式なのか?
0598nobodyさん
2007/08/20(月) 04:19:47ID:???0599nobodyさん
2007/08/21(火) 00:38:42ID:jv21ywgR0600nobodyさん
2007/08/21(火) 22:50:35ID:???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:HCjV3CA10607nobodyさん
2007/08/24(金) 11:52:50ID:???パッと見てみたが、
>Editが追加になってるし
addではなく、ちゃんとeditになっているようだけど。
>index.thtmlの中に/blog/
ルートが/blog/なので無問題。
0608nobodyさん
2007/08/25(土) 20:52:05ID:???内容は読んでないよう。
http://www.amazon.co.jp/dp/4896273567
0609nobodyさん
2007/08/27(月) 01:15:59ID:???その本どうしようかなぁ?
マニュアルのコピペとか言われてるけど
漏れがちょうど習得したいフレームワークはその3つやし
購入しようかどうかカナーリ迷う。
特にsymfonyはわかりやすい日本語マニュアルが少なく
他のフレームワークに比べて出来る事も多いが異常なまでにランニングコストが高いから
コピペでもわかりやすく書いてれば非常に助かるんだがね。
0610nobodyさん
2007/08/27(月) 03:02:22ID:???0613nobodyさん
2007/08/27(月) 11:02:16ID:???0614nobodyさん
2007/08/27(月) 11:03:59ID:???結構いい本だよ。日本語資料は少ないからね。
0616nobodyさん
2007/08/27(月) 16:22:48ID:ijRbnoqfモジュールを作る作業のみ。
OOPしてぇなぁ。
でもこの快感(フレームワークでの開発)を覚えると、めんどうなんだよな。はぁ。
0617nobodyさん
2007/08/27(月) 18:03:28ID:???0618nobodyさん
2007/08/27(月) 18:05:08ID:???0619nobodyさん
2007/08/27(月) 18:09:56ID:???0621nobodyさん
2007/08/27(月) 18:13:52ID:???0622nobodyさん
2007/08/27(月) 18:14:42ID:???だってさ、ビジネスロジックなんて単純な作業の塊だぜ?
継承とか使わないとやれない作業なんて存在しないよ。
オブジェクト指向なJavaだってさ、継承ごてごてで
使いづらくなったEJBを改め、POJOといって
継承を使わない(必須ではない)ただのクラスを使い始めた。
それでいいんだよ。シンプルでわかりやすい。
というわけで、OOPはフレームワーク自体を作るものだと思っています。
0623nobodyさん
2007/08/27(月) 18:45:34ID:???結論:たいていの場合、OOPはフレームワーク自体を作るものである。
0624nobodyさん
2007/08/27(月) 19:04:08ID:???0625nobodyさん
2007/08/27(月) 19:32:33ID:???0626nobodyさん
2007/08/27(月) 19:34:09ID:???それは突き詰めると型あり言語というものは
そういうものだからということになるんじゃないかな?
型あり言語の場合、コンパイル時に名前解決しちゃうから
名前間違いによるバグをコンパイル時に発見できる。
そして速いというメリットがある。そして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:???0632nobodyさん
2007/08/27(月) 22:13:05ID:???もまえらオナニーでもしたのかい?
0633nobodyさん
2007/08/28(火) 02:04:49ID:???0635nobodyさん
2007/08/28(火) 02:37:25ID:???0636nobodyさん
2007/08/28(火) 09:03:23ID:???0637nobodyさん
2007/08/28(火) 12:42:40ID:???ぶっちゃけ、CakePHPは、難しいと思ってましたが、やっぱり難しいです。orz
0638nobodyさん
2007/08/28(火) 12:49:12ID:???一回慣れちゃえばいいんだろうけど、次の案件でまた使わない、で忘れる。
0639nobodyさん
2007/08/29(水) 11:47:30ID:???「難しいからできない」っていうのは、先入観とかでとっつきが悪いのが大半なんだろう
0640nobodyさん
2007/08/29(水) 12:31:12ID:???function beforeFilter()
{
$this->checkSession();
}
あれ、今日は、動く。 なぜだろう?
0642nobodyさん
2007/08/29(水) 14:16:01ID:???のような場合、
findAllなどのconditionにはどのような配列を書けばいいのでしょうか?
array('name' => 'like '.$word1,'name' => 'like '.$word2)
だと当然のように配列は上書きされてしまいます。
宜しくお願いします
0643nobodyさん
2007/08/29(水) 14:25:29ID:???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:???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:???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:???失礼しました。
今回は
$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:???recursiveで設定するんじゃないのか?
まだ使ったこと無いけど
それから、その書き方じゃSQLインジェクションの
脆弱性になるんじゃないのか?まだ検証して無いけど
0651nobodyさん
2007/08/30(木) 00:25:48ID:???手前味噌で申し訳ないですが
http://hogepiyo.net/archives/25
何かツッコミあったらお願いします
0652nobodyさん
2007/08/31(金) 18:22:39ID:7m08yu49test.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): ?>
どうすれば出力されるでしょうか?
0653652
2007/08/31(金) 18:26:08ID:???index.thtml は、views/posts/ の中に置いてるファイルです。
0654nobodyさん
2007/08/31(金) 18:51:11ID:???そのスコープにないんだろ
それ以上はソースを見ないとそれだけの情報では分からん
0655652
2007/08/31(金) 19:43:09ID:???■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:???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:???0661nobodyさん
2007/09/04(火) 13:41:52ID:???そりゃそうなんだけど、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:???http://api.cakephp.org/class_model.html#9da1765e8d0756853d5e66b5c4e18159
0665nobodyさん
2007/09/04(火) 16:44:44ID:???> CRUDのSQL+カラム情報取得以外の
> DBのschema操作まで抽象化したライブラリってのはあまりない
でもbake.phpでは、データベースで定義されたテーブル情報から
どのテーブルのModelを作成しますか?って聞くわけで
方法あると思うんだけど。
>>664
それはモデルのAPIでしょ?
モデルで使っているテーブルの情報なら取れるかもしれないけど、
ほしいのはデータベースにどんなテーブルがあるかなんですよね。
0666nobodyさん
2007/09/04(火) 16:58:16ID:???を知りたいとお前が言ったから答えたまでだが。
自分で言ったことも忘れたのか?
0667nobodyさん
2007/09/04(火) 17:12:20ID:???0668663
2007/09/04(火) 17:48:54ID:???今cakeのソース落としてきて少し眺めたけど
libs/model/dbo以下の各DB毎のdriverのlistSourcesメソッドで
それぞれのDBのやり方でテーブル一覧を取得してる
何か共通の方法でDBからテーブル一覧を取得してるわけじゃなく
各々DB毎の実装を行ってAPIだけ統一、抽象化している
てか方法があろうとなかろうと
少しソース見りゃわかるような質問しといて
答えてる人に自分の思い込みだけで
別の方法があるんじゃないかとかそれじゃないとか
一体おまえ何様だよ
0669nobodyさん
2007/09/04(火) 18:41:53ID:???CakePHPの機能でデータベースにあるテーブル名の一覧を
とってくる方法聞いただけじゃん。
> 各々DB毎の実装を行ってAPIだけ統一、抽象化している
そりゃそうだ。データベースごとに命令違うのわかってるって。
その統一APIがなにか聞いただけ。
結論言えば、ConnectionManagerつかって
データソース取得してlistSourcesでしょ?
かきこした後、すぐソース見たよ。
自分で調べるのと聞いて調べるののどちらが速いかわからないから、
とりあえず質問しといただけじゃん。
情報が共有されて一石二鳥w
0671nobodyさん
2007/09/05(水) 01:29:26ID:???運がよければ、誰かが答えてくれる。
「自分で調べる」よりも「自分で調べる」+「誰かに聞く」の方が優れている。
使えるものは、使わなきゃねw
0672nobodyさん
2007/09/05(水) 09:23:21ID:???0673nobodyさん
2007/09/05(水) 16:05:13ID:???0674nobodyさん
2007/09/06(木) 00:52:29ID:???すごいというか動きが良くわからない。
なんで$form->input("data")って書くだけで、
データを持ってこれるんだ?
どのモデルを使うとかどこで指定してるんだ?
なんで書き方同じなのに勝手にチェックボックスとかリストボックスとかになるんだ?
$form->inputって一体全体どんな機能を持った関数なんだ?
わけわかんねぇ。使いこなせる自信がないorz
0675nobodyさん
2007/09/06(木) 00:57:00ID:???0676nobodyさん
2007/09/06(木) 01:07:41ID:???$form->inputでドロップダウンリストがでてくるんだけど、
これをラジオボタンにすることってできるの?
当然、そのときの選択項目はドロップダウンリストと同じ内容で。
0677nobodyさん
2007/09/06(木) 01:18:01ID:???ひどいなぁ。APIマニュアルみたけど使い方ちゃんと書いてないんだよ。
第一引数はいいとして、第二引数。 $options という配列を入れられるとは書いてあるが
具体的どんなキーのオプションが使えるのか書いてないじゃん・・・。
form.phpのソースコードみた? 単純に引数に対するタグを出力してるだけじゃなく、
データベース情報を参照していろいろやってるから把握するのに時間かかるし。
0678nobodyさん
2007/09/06(木) 08:50:46ID:???0679名無しさん@Vim%Chalice
2007/09/06(木) 11:45:44ID:3VBce1udこ れ は ひ ど い。
本当にソース見たのか?
…と思ったけど、今気分いいから
$optionsの中身をメモっといてあげる。
$options['type'](string)…以下から選べ(後は自分で何とかしろ)
hidden checkbox radio text password file select time date datetime textarea
$options['label'](string)…フォームの前にラベルを付ける。
$options['before'](string)…ラベルの前に任意のHTML
$options['after'](string)…フォームの後に任意のHTML
$options['div'](boolean)…フォームをdivで括るか
$options['inbetween'](string)…radioの間に挿入するHTML
$options['selected'](string)…selectの初期値
$options['options'](string)…$html->radio()の第二引数
$options['empty'](boolean)…falseにするとselectboxで空白が選べるようになる
まだいくつかあったと思う。補完よろ
0680nobodyさん
2007/09/06(木) 11:56:52ID:???運がよければ、誰かが答えてくれる。
「自分で調べる」よりも「自分で調べる」+「誰かに聞く」の方が優れている。
使えるものは、使わなきゃねw
0681名無しさん@Vim%Chalice
2007/09/06(木) 11:57:46ID:???$options['empty'](boolean)…trueにするとselectboxで空白が選べるようになる
だった、すまん
あと$options['value']とか
$options['between']とかがあったような。
0682nobodyさん
2007/09/06(木) 12:02:53ID:???引数多いんだね。
単に<inputタグの属性に展開されるだけかと思ったが、
emptyとか関係ないものもあるし。
どっかで見ただけで試していないがlabelを消すときは''とかではなく、
falseにするらしい。
inputのドキュメントって無いのかな?
0683nobodyさん
2007/09/06(木) 12:24:42ID:???ソース読んで無いので間違っていたら修正よろしくw
使用するテーブルは直前の$form->createで指定したmodel。
つまり$form->createはタグを出力するだけでなく副作用がある
($formの状態を変化させる)
# ↑なんか気持ち悪い仕様だなぁ。こうすればいいのに。
# $form1 = $form->create('・・・');
# echo $form1->begin(); //formタグ開始
# echo $form1->input();
# echo $form1->end(); //formタグ終了
$form1->inputで出力されるタグの種類(textとかcheckboxとか)は
データベースの型やアソシエーションから自動選択(?)
具体的にデータベースの型が何のときに
どういうタグが出力させるかは、後の人よろしくw
0685nobodyさん
2007/09/06(木) 14:29:19ID:???0686nobodyさん
2007/09/06(木) 16:08:21ID:???0687名無しさん@Vim%Chalice
2007/09/06(木) 16:34:40ID:???$form->input('field')と
$form->input('Model/field')と
$form->input('Model.field')の
大体3種類の書き方があるよな?
そんで、CakePHPは今後ドット区切り(3番目の書き方)へ
移行するって記事をどっかで見たような気がしたんだけど
ソース持ってる人いる?
0688名無しさん@Vim%Chalice
2007/09/06(木) 16:41:49ID:???http://cakebaker.42dh.com/2007/03/19/modelfield-has-been-deprecated/
0689nobodyさん
2007/09/06(木) 17:08:13ID:???ソースに書いてあるよ。
/**
* Generates a form input element complete with label and wrapper div
*
* @param string $fieldName This should be "Modelname.fieldname", "Modelname/fieldname" is deprecated
* @param array $options
* @return string
*/
ところで、scaffold(およびbakeの出力結果)に
検索機能つかないのかな?
Paginationみたいに、そのままの出力で検索機能があったら良いなぁ
検索機能自体は簡単に作れるけど、検索結果に対してPaginationとか、
そこからaddやeditをしたら、単純なindexではなく、
検索結果に戻る(当然Paginationも考慮)とか考えると
ちょっと大変だな。
addページにきたときに、addページの前の検索結果+ページを
知る必要があるから、addページに飛ぶリンクを
工夫しないといけないし。
0690nobodyさん
2007/09/07(金) 08:58:58ID:???なんと、thx
>scaffold(およびbakeの出力結果)に検索機能つかないのかな?
decorate.phpとかmasterbakeとかあったと思う。
0691nobodyさん
2007/09/09(日) 00:48:06ID:???bakeって使用するデータベースを指定することってできない?
ソース見てるとどうも'default'きめうちっぽいんだけど。
サーバー('default')とローカル('local')で設定が多少違ってて、
開発時はlocalを見てbakeしてほしいんだけど。
■ このスレッドは過去ログ倉庫に格納されています