【PHP】フレームワーク CakePHP 7ホール目【v1.2】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/01(火) 16:12:06ID:XVdxsVut※sage推奨
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
thechaw
http://thechaw.com/projects
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
CakeMatsuriTokyo2009
http://matsuri.cakephp.jp/
0002nobodyさん
2009/09/01(火) 16:12:35ID:???【PHP】フレームワーク CakePHP 6ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1236563737/
【PHP】フレームワーク CakePHP 5ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1229669539/
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0003nobodyさん
2009/09/01(火) 16:13:00ID:???連載:CakePHPで高速Webアプリ開発|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/cakephp
CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions
ttp://www.cpa-lab.com/tech2/inflects/
Free CakePHP Book (Matt Curry and Mark Story)
http://www.pseudocoder.com/free-cakephp-book/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
CakePHP Note
http://www.garacter.com/notes/CakePHP+Note/ni:5
CakePHPを使ったMVC設計のベストプラクティス - Sooey
ttp://www.sooey.com/journal/2008/03/26/717/
Qdmail(日本語メールコンポーネントとして利用可能なライブラリ)
ttp://hal456.net/qdmail/
10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
CakePHPカンファレンス東京(2008)
http://conference.cakephp.jp/
0004nobodyさん
2009/09/01(火) 16:13:21ID:???CakePHP プログラマーズ リファレンスガイド
http://cakephp.jp/doc/
CakePHPフレームワークによる快速WEB開発 |codezine
http://codezine.jp/a/article/aid/670.aspx
■関連書籍
・ver1.2系
CakePHP1.2ガイドブック
http://www.amazon.co.jp/dp/4839932468/
CakePHPによる実践Webアプリケーション開発
http://www.amazon.co.jp/dp/4839930651/
オープンソース徹底活用 CakePHPによるWebアプリケーション開発
http://www.amazon.co.jp/dp/4798022225/
CakePHP ポケットリファレンス※ver1.2beta
http://www.amazon.co.jp/dp/4774135038
CakePHP徹底入門
http://www.amazon.co.jp/dp/479811717X
・ver1.1系
CakePHPガイドブック
http://www.amazon.co.jp/dp/4839924317
Fast CakePHP
http://www.amazon.co.jp/dp/4774133418
■関連スレ
【PHP】フレームワークについて語るスレ13【総合】
http://pc11.2ch.net/test/read.cgi/php/1237825268/
0005nobodyさん
2009/09/01(火) 16:13:48ID:???補足があればどうぞ
Have a Nice Cooking !
0006nobodyさん
2009/09/01(火) 17:42:35ID:???0007nobodyさん
2009/09/01(火) 18:15:29ID:???0008nobodyさん
2009/09/01(火) 18:16:13ID:???0009nobodyさん
2009/09/02(水) 13:12:39ID:???0010nobodyさん
2009/09/02(水) 15:49:16ID:???まとめて削除とかしたいんだけども。
0011nobodyさん
2009/09/03(木) 12:27:23ID:???0012sage
2009/09/03(木) 12:29:16ID:6RTv1eVYテーブルに日付データを持たせてdatetime型で作成し、その後bake実行し、
ふんふんと眺めてみました。
新規作成のadd画面ではその日付データはドロップダウンリストになっているのですが、
そこに選択肢として、冒頭に「空白」(選択しない)を持たせたいと思っています。
現在、bakeされたソースコードは
echo $form->input('enddate',array('dateFormat'=>'YMD','monthNames'=>false,'timeFormat'=>'NONE'));
こんな感じでかかれているのですが、上記のようなことをしたい場合は
$form->selectの形で全体を書き換えなくてはいけないのでしょうか。
日付選択なので、現状の年月を取得するためのロジックはあえて書きたくないので、ピンポイントで
修正できる方法がないかと思っています。
それともbakeは本当に枠組みだけなので詳細なオプション等は書き換えが前提なのでしょうか。
よろしくお願いします。
0013nobodyさん
2009/09/03(木) 13:58:34ID:???オプションに
'empty' => '選択してちょ'
だったと思う
select 使う場合は、'showEmpty' => 'select me'
0015nobodyさん
2009/09/03(木) 14:45:27ID:???ファイルベースでやるなら
rmコマンド使ってまとめて消せるからいいんだけど
memcacheとか使うと出来ないじゃん。
001612
2009/09/03(木) 18:07:45ID:???ありがとうございます!!
無事に
echo $form->input('enddate',array('dateFormat'=>'YMD','monthNames'=>false,'timeFormat'=>'NONE','empty' => '選択してちょ' ));
こう書くことで一番初めの選択肢に追加することができました!
これを読んだあと、
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements
こちらに同じことがかいてありました・・、すいません。
inputの第一引数の値によって、表示するタイプが違うので勝手にドロップダウンリストになるのですね。
実際、ビューに自作で手を入れるときはinputではなくselectを使用するほうがいいのかな、とは
思っているのですが(見た目で何が表示されるのかわかりづらい気がしました)
ありがとうございました。
ガイドブックにはここらへんの説明があまりかかれてないので、助かりました、ありがとうございます。
0017nobodyさん
2009/09/03(木) 22:56:22ID:l9lqLow/どういたしまして。がんばりや。
0018nobodyさん
2009/09/04(金) 13:12:26ID:???1つの検索フォームに「ユーザー」「日記」の2つのラジオボタンを置いてラジオボタン別に検索内容を出し分けたい。
この場合フォームの送り先のControllerはどうするのが適切なのかな?
1. UsersControllerに送信してラジオボタンが「日記」だった場合はDiaryControllerにリダイレクトする
2. SearchesControllerみたいなのを作ってそこに送信。その中でどちらかのモデルから検索結果を取得
3. 根本的に頭の中がおかしい
アドバイスお願いします。
0019nobodyさん
2009/09/04(金) 13:12:50ID:???Cookieの発行がおかしい
⇒チケット出てるみたいだけど、Cookieの仕様書どおりに作ったと言い張ってる?
リダイレクト
⇒3xxのリダイレクトを追跡してくれない。まぁ自分で追跡すればいいんだけど面倒
すなおにPear::HTTP_Clientつかった
0020nobodyさん
2009/09/04(金) 14:40:43ID:???PCならJavascriptで切り替えればいいと思うけどそれをしないなら
俺は2を使うな。
>>19
複数クッキーに対応してないだけでしょ。
書き直したら使えたよ。
0021nobodyさん
2009/09/04(金) 14:55:30ID:???継承したクラス・・・めんどい
0022nobodyさん
2009/09/04(金) 15:32:52ID:???0023nobodyさん
2009/09/04(金) 19:30:20ID:???じゃあさ普通毎回配列の中身変わるじゃん?変わんないの。
なんでなん?shuffleって確か中身はrandだからsrandが固定されてんのかなって思って
コアライブラリにgrep掛けて探したら居るわけ。
cake\libs\security.php
********************************************
if (!defined('CIPHER_SEED')) {
//This is temporary will change later
define('CIPHER_SEED', '76859309657453542496749683645');
}
srand(CIPHER_SEED);
********************************************
まぁsrandちゃんとしない俺が悪いけどさ、
76859309657453542496749683645ってなんなのさ
誰か教えてよ!
0024nobodyさん
2009/09/04(金) 19:43:31ID:???みなさんは、認証が必要なページと不要なページが混在している場合ってどうしてますか?
1.AppControllerでauthコンポーネントを読ませて、認証が不要なページでAuth::allow()を呼ぶ
2.認証が必要なページでのみauthコンポーネントを読ませる
3.authコンポーネントを使用しない
どれもスマートさに欠ける気がするのだが、何か他に良い方法があったら教えて欲しい。
002624
2009/09/04(金) 20:19:56ID:???データの更新が可能なページ
参照系のページは、認証(ログイン)不要にしたい。
ゲストアカウント作っても良いのだが、一々ログインさせるのは面倒かなと思っています。
自動的にゲストアカウントでログインさせる様な巧い手があれば、それもアリかな?とも思っています。
ちなみにaclコンポーネントは自前で書いて、Auth->autherise=array('object'=>'HogeAcl');しようと画策してます。
※autherise:スペル違うカモ…手元にPC無いので確認出来ない
002824
2009/09/05(土) 00:34:22ID:???やっぱり、それがスタンダードですか。
とりあえず、今は↓みたいな感じでやってみようかと妄想してます。
・AppControllerでauthコンポーネントを読ませる
・beforeFilter()内で、未認証だった場合に Auth->login($dummy_user) を呼び出してダミーアカウントで認証
・afterFilter()又はbefore/afterRender()内で、ダミーアカウントで認証されていた場合にログアウト処理を呼び出す
0029nobodyさん
2009/09/05(土) 11:21:53ID:4jU9VbTXbeforeFilter()内で
$this->Auth->allow()
$this->Auth->deny()
使ってやるのはダメなの?
003024
2009/09/05(土) 18:13:26ID:???あ、、、
確かに、>>28みたいにするくらいならbeforeFilter()内で自前のACL用コンポーネントのチェックメソッド呼んでallow()、deny() する方がスマートですね。
いつの間にか、Auth->authorize を使用する事に固執してしまっていたようです。
003112
2009/09/05(土) 18:43:41ID:???(もしごらんになっていたらすいません)
・ユーザー登録(認証いらない)
・ブックマーク登録(認証必要)
みたいなケースの場合
app/app_controller.phpに認証必要フラグ$needAuthをfalseにし、trueの場合は
認証が正しくない場合は、エラーをだす。falseのときは何もしない。
というような処理をさせておいて
各コントローラーに、その認証必要フラグをいちいち
true,falseに切り替えることで処理していました。
userのコントローラーはneedAuthフラグをfalseにし
bookmarkコントローラーはneedAuthフラグをtrueにすると上位の
コントローラーでログイン情報の有無を確認する、という感じでしょうか。
まだ私がneedAuthコンポーネント使ってないので参考にならないかもしれません。
0032nobodyさん
2009/09/07(月) 12:31:03ID:???CakeでLDAP認証制御できたら、
フォルダのパーミッション毎に認証のON, OFFの切り分けできるのになぁと夢想したりする。
0033nobodyさん
2009/09/07(月) 17:12:43ID:???0034nobodyさん
2009/09/08(火) 00:46:21ID:xTRWhMD60035nobodyさん
2009/09/08(火) 00:53:44ID:???ある程度コントローラが固まった段階で入れてます。
0036nobodyさん
2009/09/08(火) 06:26:04ID:???0037nobodyさん
2009/09/08(火) 10:31:43ID:???MySQLもない格安レンタルサーバーでCakeが動くかどうかわからないぞ。
もしPHPのメモリが足りたとしても、
大人しくCodeIgniterあたりでも使った方が良い。
0039nobodyさん
2009/09/08(火) 12:10:55ID:???DB無しの環境で動くのかどうか判らないなぁ
0041nobodyさん
2009/09/08(火) 13:22:21ID:???$uses = false;
とか書けばいいだけじゃないの?
modelのCRUDを全てファイル操作にマップするビヘイビアとか探せばありそう。
いろいろ制限はされるし動作は遅いだろうけど
0042nobodyさん
2009/09/08(火) 14:04:23ID:???http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2061&forum=6
004336
2009/09/08(火) 22:15:21ID:???軽いフレームワークなんですね。>CodeIgniter
なかなか良さげなので調べてみます。
>>42
Posqlいいですね!pure PHPのデータベースでCakePHP対応してるなんて、まさに求めてた物です。
早速使ってみようかな。速度とか、安定性とかちょっと心配ですが…
0044nobodyさん
2009/09/09(水) 00:40:18ID:???アップロードされたファイルを確かめて、
ファイルの種類によって処理を分けて(例えば画像だったらExifを解析したりサムネイルをつくるとか)
データを登録・・・っていう流れなんですけど、
そのまま直線的に書くと、コントローラーがどどーっと長くなってしまいます。
どの辺からモデルの仕事と分けるべきでしょうか?
0045nobodyさん
2009/09/09(水) 00:43:12ID:???0046nobodyさん
2009/09/09(水) 00:44:11ID:???みたいな既存のライブラリをベンダーで読み込むとか
コンポーネント使うとか
0047nobodyさん
2009/09/09(水) 01:01:21ID:rQurxkXZつMedia Plugin
004844
2009/09/09(水) 02:17:00ID:???確かに >>46 さんの言うようにコンポーネントかなあとも思ったりしたんだけど、
コンポーネントでいろいろやってDB保存用のデータを出してくるんだったら、
最初からモデルなのかなあ。とも悩んでみたところでした。
Media Pluginつうのを調べてみたらビヘイビアで処理してるんですね。
これをちょっと試してみます。
0049nobodyさん
2009/09/09(水) 03:01:54ID:???処理を分ける部分。if文と各種呼び出しのみ。
if文が連なって長くなってもそれは仕方が無い。
コンポーネント
アップロードされたファイルの処理の部分
モデル
その他
0050nobodyさん
2009/09/09(水) 10:37:42ID:???0051nobodyさん
2009/09/09(水) 18:58:34ID:rQurxkXZ0052nobodyさん
2009/09/10(木) 15:07:21ID:???hoge.com/users/login
としたいんですが
hoge.com/app/users/login になってしまいます><
app不要なんですがどこを弄ればいいですか?
0053nobodyさん
2009/09/10(木) 16:28:33ID:???ウェブルート/app/index.php
を読み込むからだろ。
ウェブルート直下にindex.php置けや。
0054nobodyさん
2009/09/10(木) 16:45:19ID:???できました><
0058nobodyさん
2009/09/10(木) 18:24:29ID:???0060nobodyさん
2009/09/10(木) 20:09:26ID:???0061nobodyさん
2009/09/10(木) 20:19:38ID:???怒るでしかしw
0062nobodyさん
2009/09/10(木) 20:30:45ID:???006358
2009/09/10(木) 20:34:14ID:???0064nobodyさん
2009/09/10(木) 20:34:54ID:???0065nobodyさん
2009/09/10(木) 21:29:59ID:vjF96vcKとかどうすればいいん?
$this->Table->find('all',array('fields'=>'Table.created + INTERVAL 1
HOUR AS hoge'));
だと
SELECT `Took`.`created + INTERVAL 1 HOUR` AS `hoge` FROM `tables` AS `Table`
とかになってエラーになる
$this->Table->query('SELECT tables.created + INTERVAL 1 HOUR AS hoge
FROM books');
$this->Table->{'SELECT tables.created + INTERVAL 1 HOUR AS hoge FROM books'}();
しかないの?
0066nobodyさん
2009/09/10(木) 22:51:58ID:???DATE_ADD( Table.created, INTERVAL 1 HOUR) as hoge
ではどうでしょ?
0067nobodyさん
2009/09/10(木) 22:57:56ID:???パフォーマンス上問題が無いのであれば、
PHP側で実装する。
そうするとデータベース変更しても使えるしね。
E○-○UBEみたいに、ifでDB判断して
実行するSQLを切り替えなくてすむぞw
0068nobodyさん
2009/09/11(金) 11:07:52ID:breeYuObhoge_controllerがあって、
使うのテーブルがhoge1とhoge2がある場合、
モデルはhoge1.phpとhoge2.phpになるのでしょうか?
今までコントローラー名とモデル名は同じで作成していたのですが、
一つのコントローラーで2つのテーブルに同時にsaveしたい時に
どうしてもこのやり方ではできなくなってしまったので・・・
$this->Model->query()で無理矢理やれない事もないのですが、
$this->Model->query()がクエリに成功しても失敗しても
レスポンスが返ってこないのでエラー処理できなくて困ってます。
ご教授いただけるとありがたいです。
0069nobodyさん
2009/09/11(金) 11:17:45ID:???アソシエーションをちゃんとかいてれば、まとめてsaveするよ。
hoge1とhoge2の関係性とか書いたほうがいいんじゃないかな。
0070nobodyさん
2009/09/11(金) 11:35:25ID:breeYuObありがとうございます。
hoge1とhoge2の関係が1:多の関係で、
今やっているのが、hogeControllerに
$users= array('Hoge');
と記述していて、
hogeModelには
useTable = "hoge1";
となっています。
hogeModelからfindでhoge1の情報を取得しているのですが
最終的にその情報をもとに、hoge1とhoge2にそれぞれ
UPDATEとINSERTをやりたいのです。
その場合、それぞれテーブルごとにモデルを作成して、
hoge1側に$hasOneを設定すればいいのでしょうか?
0071nobodyさん
2009/09/11(金) 11:39:45ID:???× $users = array('Hoge');
○ $uses = array('Hoge');
ですね、失礼しました。
0072nobodyさん
2009/09/11(金) 12:00:54ID:???Hoge1 を Article
Hoge2 を Comment
とすると
Articleモデルは
$hasMany = array('Comment');
Commentモデルは
$belongsTo = array('Article');
としておけばよい
あとは、ArticlesControllerで
$this->Article->saveAll とか $this->Article->Comment->save とかする
0073nobodyさん
2009/09/11(金) 12:02:31ID:???>その場合、それぞれテーブルごとにモデルを作成して、
>hoge1側に$hasOneを設定すればいいのでしょうか?
それでいいと思うよ。
なるべく$usesとか使わないで、命名ルールに素直に従う方が後々楽ですよ。
例えば、テーブル名をhogeとhoge1にしてHogeモデルとhogeコントローラーを作るとか
0074nobodyさん
2009/09/11(金) 12:03:42ID:???$this->Article->save
$this->Article->Comment->save
で分けて保存した場合トランザクションが利かないことがあるよね。
0077nobodyさん
2009/09/11(金) 13:48:03ID:???0078nobodyさん
2009/09/11(金) 16:43:55ID:???できやへんの?
0079nobodyさん
2009/09/11(金) 19:05:57ID:???0081nobodyさん
2009/09/11(金) 20:02:35ID:???0082nobodyさん
2009/09/11(金) 20:16:33ID:???さぁ、このページで「log」で検索する作業に入るんだ。
マニュアルに結構載ってるから一通り読んで、まず検索してみろ。
ググっても結構あったぞ。
0084nobodyさん
2009/09/11(金) 21:02:25ID:???あ、ごめん。数ヶ月前に見たけど出来なかったサイトがあったんだけど、
もう一度見たら出来たわ。ごめんあさい。
http://www.a24loveweb.net/cake/%E9%81%8B%E7%94%A8%E6%99%82%E3%81%ABphp%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
これね!
008565
2009/09/12(土) 00:56:23ID:???いやあ、勝手にパースされて`が変なところに付くということなんで
SQLを変えても意味がないというか。
$this->Table->selectAdd('tables.created + INTERVAL '.$this->Table->escape('$hour').' HOUR AS hoge');
みたいなのがあればいいんだがなあ、と。
>>67
EC-Cubeは使ったことないからわからないが、
今回は単純なSQLだからいいけど、
複雑なのだと非常にパフォーマンス上問題になりそうなのでご勘弁願いたい。
つうかDB乗り換えるような変更があったとしたら、
SQLだけ対応しててもそのまま動くとは思えないんだが。
0086nobodyさん
2009/09/12(土) 01:13:40ID:???preg_match('/(?:\w+\.)?(\w+)/', $options['sort'], $result)
とか書いてあるけど全然意味がわかりません。
008712
2009/09/12(土) 11:58:30ID:???toのUser.idを格納するフィールドを作りました。
Post.user_id
Post.from_user_id
と作成し、
'from_User' =>array('className' => 'User','foreignKey' => 'from_user_id'),
'to_User' =>array('className' => 'User','foreignKey' => 'user_id'),
のように$belongsToを設定しました。
ここでPostの編集画面(edit)でそれぞれのUserを選択させるコンボボックスを表示させる場合に
他所でbakeしたソースを見ると
$users = $this->Post->to_User->find('list');
$this->set(compact('users'));
こうセットしているようなのですが、これだけだとfromの方はtextでidがそのまま出てしまいます。
試行錯誤の結果
$from_users = $this->Post->from_User->find('list');
$this->set(compact('from_users'));
が必要なことがわかったのですが、ここの$from_usersという名称はどこで関連付けた名前なのでしょうか。
toの方は$usersで良いのがなぜだかわからず。
ためしに$usersを$to_usersにしたら動かなくなりました・・・。
モデルの基本的なところが理解できていないかもしれませんが、
こういう場合はどのようにするべきなのでしょうか。
わかりにくい質問ですいません。
0088nobodyさん
2009/09/12(土) 12:05:02ID:???ちゃんとやってみたのか?>>66の言うとおり
$this->Table->find('all',array('fields'=>'DATE_ADD(Table.created, INTERVAL 1 HOUR) as hoge'));
でいけるはずだぞ。
>>86
普通は第2引数は指定しないと思う。
そうするとデフォルト値とquery stringをマージして現在のソートキーを返してくれるから。
$options['sort']は、'Model.id'みたいなのから'id'を取り出してるだけじゃなかろうか。
008982
2009/09/12(土) 12:24:36ID:???http://book.cakephp.org/ja/view/2/x1-2-Collection
というurlを入れるつもりだったのは秘密だ ><
ごめんな!>>78
0090nobodyさん
2009/09/12(土) 17:49:07ID:???; *
; * CakePHP(tm) : Rapid Development Framework <http://www.cakephp.org/>
・
・
・
よくコードに上記のようなコメント書いてるけど絶対書かないといけないんですか?
書き方載ってるサイト教えてください
0091nobodyさん
2009/09/12(土) 18:13:52ID:???phpDocumentor でググるといいかな。
絶対必要というわけではないけど、
自分で作ったファンクションとかAPIのドキュメントを自動生成するために書式が決まってる。
後から自分のコードを読みやすくするには書いとくクセを付けといた方がいいのかも。
0093nobodyさん
2009/09/13(日) 01:37:39ID:???うん、それだけ。
0094nobodyさん
2009/09/14(月) 21:33:44ID:SnxRq9ULそのテーブル内でユニークなランダム文字列ないし数字を振ってくれる便利なものないですか?
UUIDは長過ぎて8文字程度のランダムな文字列を割り当てたいんだけど
0096nobodyさん
2009/09/14(月) 23:05:17ID:SnxRq9ULCakeのString::uuid()がらみで聞いてみたけど確かにすれ違いかも
Cakeに用意されてたら同じくStringクラスにあるはずだしね。。
0097nobodyさん
2009/09/15(火) 00:35:27ID:???以前作ってみた。
処理としては、app_modelに、ランダムな/[a-zA-Z0-9]{8}/を返す関数を作り、
save時にそいつを呼び出して割り当てる(既に割り当て済みの文字列だったら、新しいものが出てくるまで処理を繰り返す)
これでいけた。まあ自前で作っても簡単。
0098nobodyさん
2009/09/15(火) 01:27:37ID:???なんかアホらしい気もするが
0100nobodyさん
2009/09/15(火) 13:20:04ID:???0101nobodyさん
2009/09/15(火) 13:31:25ID:jnkEds0n速度遅そうですが以下のようにしました。
Model->__schemaあたりからidのカラム長を取得
Text_Passwordでカラム長のパスワードを生成
Model->findしてかぶりがないかチェック
かぶっていれば10回まで再帰
ってなビヘイビアを作り読み込む。
■ このスレッドは過去ログ倉庫に格納されています