トップページphp
995コメント290KB

【PHP】フレームワーク CakePHP 13ホール目【v2.0】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/11/09(水) 01:05:10.60ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja

前スレ
【PHP】フレームワーク CakePHP 12ホール目【笑】
http://hibari.2ch.net/test/read.cgi/php/1309505626/
0168nobodyさん2011/11/30(水) 02:02:38.21ID:???
>>167
ちょっと古い記事ですが
http://blog.syuhari.jp/archives/172

テーブルからデータを取得するコードはモデルにメソッドとして書いて
コントローラで取得して、ビューに渡すという流れです
0169nobodyさん2011/11/30(水) 11:57:10.26ID:???
>>166
俺のところでは出来るが

>>168
これ、ページネーション(paginate)を使いたい場合は使えないんだよな・・・
0170nobodyさん2011/11/30(水) 13:04:25.29ID:???
>>169
すみません、バージョン教えてもらえますか?
こちら2.0です。
0171nobodyさん2011/11/30(水) 16:17:33.31ID:???
バージョンだわ。俺は1.3系使ってるし。
0172nobodyさん2011/11/30(水) 22:39:37.21ID:???
いよいよ2.0の話題が増えていくのか
0173nobodyさん2011/12/01(木) 01:14:05.48ID:???
app/webroot/files/sample.phpから
app/views/layouts/layouts.ctp
を参照したいんですけど、相対パスってどうなりますか?
0174nobodyさん2011/12/01(木) 01:15:41.08ID:???
むずかしいもんだいだね
0175nobodyさん2011/12/01(木) 01:19:47.08ID:???
すみません../../views/layouts/でいけました
webrootなので複雑に考えてました
0176nobodyさん2011/12/01(木) 01:36:07.41ID:???
逆にlayouts.ctpから参照するときは
files/sample.phpなんですね
0177nobodyさん2011/12/01(木) 21:07:27.25ID:???
2.0系って、従来のプラグイン使えるのかな
移行ガイドにはそのあたり触れられてないのが気になる
0178nobodyさん2011/12/02(金) 02:48:35.30ID:LODTi230
CakePHP + Oracleってあまり相性良くない?
Oracleってオートインクリメント使えないんだけど
CakePHP側でうまくやってくれるとか?
0179nobodyさん2011/12/02(金) 04:44:28.87ID:???
そもそも使えるの?
0180nobodyさん2011/12/02(金) 22:19:51.28ID:???
オートインクリメントが使えなかったら
RDBMSとして成り立たないだろ。
お前があほなだけ。
0181nobodyさん2011/12/02(金) 23:44:46.73ID:???
Oracle側でシーケンスとトリガーでやります
0182nobodyさん2011/12/03(土) 00:46:21.36ID:ewJKbRKA
CakePHP2.0でSqlite3のファイルにアクセスしたいんだけど
どうもうまくいきません。以下のようなエラーが出ます。

Missing Database Table
Error: Database table xxx for model Xxx was not found.

もしかして、CakePHP2.0ではsqlite3のファイルにアクセスできない?
0183nobodyさん2011/12/03(土) 00:51:11.36ID:???
Missing Database Table って言ってんだろw
0184nobodyさん2011/12/03(土) 09:33:17.39ID:???
>>182
Model.phpが無いんじゃないの?
cake bakeしてみたら。
0185nobodyさん2011/12/03(土) 13:53:22.68ID:???
CakePHP辞典の人が2.0バージョンも出してくれたらいいのにな。
今は明らかに情報が足りなすぎる。
0186nobodyさん2011/12/03(土) 16:12:59.14ID:???
>>182
eat cake, PDO版 SQLite3 を使う
http://miztools.so.land.to/php5_list/eat_cake/cake2/edit/sqlite3
0187nobodyさん2011/12/04(日) 01:19:55.36ID:???
sqliteいいの?mysqlしかつかったことない
0188nobodyさん2011/12/04(日) 02:29:45.94ID:???
システムが違う。
sqliteはテキストデータにRDBMSっぽい書き込みをして使用する。
0189nobodyさん2011/12/04(日) 02:37:58.60ID:vxdOAUX9
sqliteはPHP5からのデフォルトバンドルだぜ?
しかもDBサーバを立てることもなく一つのファイルで完結だ。
俺はこんないいものを知らない。
0190nobodyさん2011/12/04(日) 02:43:31.05ID:???
同意せざる終えない。使い勝手良すぎ
0191nobodyさん2011/12/04(日) 15:48:53.97ID:???
app/app_controller.phpを作って、
function beforeFilter(){
echo '<!--'.$this->params['controller'].'-->';
}
とやってみたんですが、特定のコントローラだけ$this->params['controller']で出力されません
何が原因なんでしょうか?
他とその出ないコントローラの違いで思い当たるのはそのコントローラにもbeforeFilterが指定してあることくらいです
01921912011/12/04(日) 15:50:38.27ID:???
>>191に追記です
コントローラ値が空なだけだと思ったら、どうやたapp_controller自体実行されてなかったようです
(普通に文字を出力させてもでませんでした)
御教示いただけたら幸いです
0193nobodyさん2011/12/04(日) 15:54:37.24ID:???
>>191
コントローラ内のbeforeFilter内で
parent::beforeFilter();
ってやってる?
01941912011/12/04(日) 16:19:33.30ID:???
>>193
それでした
app_controllerを作ったのがはじめてだったので、決まりごとを理解してませんでした
ありがとう御座いました
0195nobodyさん2011/12/07(水) 14:22:49.37ID:XLyuG92u
cakephp 1.3.13を使ってcakeError()の情報をXMLで返したのですがうまくいきません。
通常のデータは以下のようなことでViewをXMLにしています。
var $helpers = array('Text', 'Xml');
public $components = array('RequestHandler', 'Security');
function beforeRender() {
$this->RequestHandler->respondAs('xml');
$this->viewPath .= '/xml';
$this->layoutPath = 'xml';

しかし、app_error.phpに
function errorXXXX($params) {
$this->helpers[] = 'Xml';
if ($this->controller->RequestHandler->isXml()) {
$this->controller->RequestHandler->renderAs($this->controller, 'xml');
}
$this->controller->render('errors', 'default');

とやってデバッグすると、内部の$outに正常にXMLが入っているのですが、クライアント
にわたりません。なにか特別のことをしなければならないのでしょうか。
0196nobodyさん2011/12/07(水) 17:18:20.77ID:???
検索処理で該当データなしの場合、「(検索条件)に一致する情報は見つかりませんでした。」みたいなメッセージを出力させたいのですが、
どこにどう記述するべきでしょうか?Controller?View?
0197nobodyさん2011/12/07(水) 18:02:05.03ID:???
View
0198nobodyさん2011/12/07(水) 21:33:41.84ID:???
Viewに決まってるだろ
0199nobodyさん2011/12/07(水) 23:38:47.74ID:???
>>196
controllerかmodelで分岐させて、controllerでset
viewの出したい箇所に変数を<?php echo $message ?>
0200nobodyさん2011/12/07(水) 23:41:58.93ID:???
>>199
いや、View内で分岐だろ
02011992011/12/07(水) 23:45:59.78ID:???
うちはmodel::findのif(empty($data))の分岐でviewに渡す文字列またはarray。
viewの方にもif(isset())で文字列またはarray(リスト表現)
0202nobodyさん2011/12/08(木) 01:31:10.64ID:???
CakePHPはPHP5.3に完全対応できないだろうな。
PHP5.3の恩恵を受けることのできるフレームワークはfuelphpしかない。
CakePHPの時代も終わりか。
0203nobodyさん2011/12/08(木) 01:32:48.80ID:???
>>202
スレあるんなら誘導してくれよ

【php】fuelphpについて語ろうぜ
http://hibari.2ch.net/test/read.cgi/php/1321843505/
0204nobodyさん2011/12/08(木) 01:37:07.11ID:???
アクセス修飾子にvarが使われてる時点で、すごい気持ち悪い。
0205nobodyさん2011/12/08(木) 02:27:45.30ID:???
DebugKit、2.0の環境で使えてます?

LAMP環境で
var $components = array('DebugKit.Toolbar');
とAppControllerに書くと、画面が真っ白になる・・・
xampp環境だと問題ないんだけど。
0206nobodyさん2011/12/08(木) 02:47:03.37ID:???
Lithiumはどうなったのよ
0207nobodyさん2011/12/08(木) 09:13:39.91ID:???
Cakeオワコン過ぎ
技術情報とかぐぐっても2009年とかの前のバージョンの記事しか出ないし
便利なプラグインなんかも大体その頃に作られてて、今は放置
大きめの英語の掲示板で技術質問をしても、1日1個の書き込みもない過疎っぷりでレスが付かない
おワットる
0208nobodyさん2011/12/08(木) 10:23:40.21ID:???
逆に他のフレームワークだと書き込みは多いのか?
0209nobodyさん2011/12/08(木) 16:08:22.57ID:???
以前のような盛り上がりは無くなったね
っていうか、前のバージョンでもさほど動作が変わらないから書き直すほどでも無いしなあ…
でもそういうバージョンの違いがあってもちょっと直すだけで動くと言うことを新規参入者は知らないから、
今から始めようという人には不親切な環境かもね
cookbookも日本語になってないし
0210nobodyさん2011/12/08(木) 16:27:06.15ID:???
えー
find('all')かfindAllかとか、大きな違いで戸惑うと思うけどなあ
他にも色々変わっていて困ったことがあった
0211nobodyさん2011/12/08(木) 18:21:25.83ID:???
>>210
そのくらいは最初にブログチュートリアルで学ぶかマイグレーションガイド見てください
0212nobodyさん2011/12/10(土) 06:31:35.05ID:dP9DBevc
早く2.0のcookbook日本語化しろよ。
どんだけ情報少ないんだよ。
ちんたらしてるとユーザー逃げるぞ。
0213nobodyさん2011/12/10(土) 19:52:45.95ID:???
よっしゃ、まかせろ!
0214nobodyさん2011/12/10(土) 21:39:38.00ID:XSFB8P6r
掲示板に画像UPの機能付けようとしてて、現在メディアプラグインを
使おうとしてるんですがうまくいきません。
「The file cannot be transferred from or to location.」と表示されて
先に進めず、力量不足で問題の切り分けもできない状態です・・・
メディアプラグインを使われてる方、アドバイスお願いします。

現在の環境はMacでXAMPP,php5.29,cakephp1.3,mediaplugin1.3です。
0215nobodyさん2011/12/11(日) 02:28:53.15ID:???
>>214
使ったことないからわからんけど、軽くググった感じだと、たぶんファイルの書き出し先がちゃんと指定されてないんじゃね
0216nobodyさん2011/12/11(日) 18:29:54.09ID:???
ログイン機能があったのですがChromeだけセッションが保持されなくなってしまいました。
なにか原因としてかんがえられますか
02172162011/12/11(日) 19:19:22.12ID:???
すみません
Cookie削除したら解決しました
0218nobodyさん2011/12/11(日) 20:39:39.12ID:???
>>213
まだですか
0219nobodyさん2011/12/11(日) 20:56:58.63ID:???
>>215
レスありがとう御座います。
現状を報告すると、
xamppのtempフォルダまではちゃんと、ファイルが上がってました。
しかしそこからプラグインが指定している、weroot/media/transfer/img/
フォルダには移動されていませんでした。
パーミッションを777にしても駄目だったので今からソースを追ってみます。

進展があったらまた、こちらに報告します。
0220nobodyさん2011/12/11(日) 21:06:56.91ID:???
>>219
パス間違えました
webroot/media/transfer/img/ です。
02212152011/12/11(日) 21:11:51.64ID:???
>>220
サーバー側までファイルは来ていて意図するところに書き出せないと言うことは、やっぱりそういうtypo系のミスじゃないかなー
あとはファイルを置くディレクトリの階層浅くして別のところに作って試してみるとか
0222nobodyさん2011/12/11(日) 21:43:21.91ID:???
>>221
少し進展があったのでご報告します。

今までチュートリアル系のブログを見ながら試していたのですが
最新のヘルプを見るとadd.ctp(登録用view)に追加する記述が変わっていました。

今まで
echo $form->create('Hoge',array('action'=>'add','type'=>'file'));
echo $this->element('attachments', array('plugin' => 'media'));

新しい
echo $form->create('Hoge',array('action'=>'add','type'=>'file'));
echo $form->input('file', array('type' => 'file'));

新しいもので試した所、ファイルはアップロードされていましたが
$hasManyで設定したテーブルにファイルの情報が保存されていませんでした。

----
プラグインの制作者様が細かいバージョンで仕様変更されているようなので
注意して進めていきたいと思います。
また、進展がありましたら報告します。
0223nobodyさん2011/12/12(月) 11:11:03.41ID:???
Cakeの実行速度が遅いので、なるべく急いで他のフレームワークに移行したい場合
おすすめがあるとしたら何でしょうか?
移植のしやすさと得られるパフォーマンスの改善のバランスが良いもの
んなもん経験者にしかわからんと思うが、もしいたら
0224nobodyさん2011/12/12(月) 11:29:31.97ID:???
なるべく急いで他のフレームワークを取得できるなら
Cakeの実行速度を上げる方法を学んだ方が良いですよ。
0225nobodyさん2011/12/12(月) 13:18:51.48ID:???
>>223
どこがネックで遅いのか書くとより良い回答が期待できると思う。
どこがネックかもわかってないなら、まずやることはフレームワークの移行ではない。
0226nobodyさん2011/12/12(月) 13:33:57.79ID:???
App::import()が遅いです
02272222011/12/12(月) 15:26:43.56ID:???
メディアプラグインで画像アップロード機能を実装しようと
してましたがもう無理です。
添付されたヘルプと、ソースを追って行った時の処理が違うので
修正する為のコストが多すぎます。

こんな事なら最初から全部自分で書けばよかった。
0228nobodyさん2011/12/12(月) 16:38:37.11ID:???
こんなガタガタのフレームワーク使ったら、そうなるわな…
MVCの本当に基本フレームワークとしては普通に使えるから
それ以上の機能は自分で書いた方がいい
0229nobodyさん2011/12/12(月) 17:46:20.08ID:???
てか、画像アップロードの仕組みってそんなに難しくないんだから
自分で作ればいいのに。フレームワーク使う前の関数・クラスとかあるだろ。
0230nobodyさん2011/12/12(月) 17:57:52.56ID:???
フレームワーク使うと、何故かフレームワークの機能を使わなくちゃならない気分になるんだよな
俺もCakeのヘルパーとかプラグインとか最初試して、結果試した時間は全部無駄になったな
結局自分で作って元気に動いてるよ
0231nobodyさん2011/12/12(月) 18:14:26.06ID:???
App::import()が遅いなら普通にinclude・requireすればいいのと一緒だな
0232nobodyさん2011/12/12(月) 18:22:41.27ID:???
CakePHPで、DBが死んでる時はこっちのコントローラに分岐ってことをやりたいのですが
DB接続できないとモデルのコンストラクタがエラーになって、そこで処理が止まっちまいます

これを避けるにはcake以下を直接書き換えるしかない?
0233nobodyさん2011/12/12(月) 22:02:32.47ID:???
pluginは有志開発だから、過剰な期待しちゃいかんよね
0234nobodyさん2011/12/12(月) 22:15:59.53ID:???
メディアプラグインは2.0でうごくん?
02352222011/12/12(月) 22:21:11.57ID:???
>>229
セキュリティ的にちゃんとした物が書ける自信がなかったので
プラグイン使おうと思いました。
>>230
今回は裏目に出たけど、他人のソースを読めてよかったと思う事にします。


画像うpについては↓のプラグインがさくっと動いたので今回はこれで行く事にします。
ttps://github.com/fusic/filebinder
制作者様(?)の解説動画↓
ttp://zenpre.net/p/Gacui

では、名無しに戻ります。お騒がせしました。
0236nobodyさん2011/12/12(月) 22:26:02.72ID:???
>>234
1.3でぼろぼろだから2.0は厳しいと思う。
作者がgithubで「自分の為に作ってるプラグインで、今忙しいごにょごにょ」
って言ってたから自分で修正できないならやめとけ。
0237nobodyさん2011/12/13(火) 10:15:11.41ID:???
結局、誰の助言も聞かずに自分で探して終了か。
画像アップロード如きで「セキュリティが〜」とか言っちゃう奴が
他人の作ったプラグインをすんなりと受け入れるというのが
おかしいとは思わないんだろうな。

頑なに意思を変えないなら、人に質問しなきゃ良いのに。
0238nobodyさん2011/12/13(火) 11:31:08.57ID:???
なんか陰湿でキモい
0239nobodyさん2011/12/13(火) 15:08:02.43ID:???
うかつに質問も出来ないこんな2ちゃんねるじゃ
0240nobodyさん2011/12/13(火) 15:53:33.42ID:???
自分で分かるならわざわざ質問するなとは思わないか?
0241nobodyさん2011/12/13(火) 16:19:08.03ID:???
>>239
ぽいずん
0242nobodyさん2011/12/14(水) 00:20:14.28ID:???
>>240
自分の中で80くらいがんばって無理だったらネットで質問しつつ後の20の努力をする。
質問に回答もなく、後の20がんばっても無理だったら諦めて違う方法を模索する。
0243nobodyさん2011/12/14(水) 01:34:17.83ID:???
いや、回答出してるじゃん
0244nobodyさん2011/12/14(水) 17:39:11.08ID:???
CodeIgniterは覚えたからCakePHPも覚えたいと思うんですけど難しいよ
0245nobodyさん2011/12/14(水) 17:40:34.96ID:???
モデルってデータベースに接続しないといけないの?
モデルに変数でデータを入れててコントローラーからそれらの変数を取得ってできないの?
0246nobodyさん2011/12/14(水) 17:41:52.04ID:???
グローバル変数みたいなことか?出来ると思うけど。
あと、データベース使わなくても使えるよ。
0247nobodyさん2011/12/14(水) 23:57:19.24ID:???
Railsのせいでモデル=データベースの1テーブルって
間違った考えが広まってしまったよな。
0248nobodyさん2011/12/15(木) 00:06:20.83ID:???
4
0249nobodyさん2011/12/15(木) 03:00:05.66ID:???
モデル名とコンポーネント名が重複してるとコンポーネントの方が優先されてモデルにアクセスできなくなるのって仕様?
UserモデルがあるところにUserコンポーネントも作っちゃうと$this->User->save()とかがundefined methodになってしまう
0250nobodyさん2011/12/15(木) 11:44:42.72ID:???
同名ならそりゃそうだ
0251nobodyさん2011/12/15(木) 11:46:40.70ID:???
またCakeの関数と重なるアクション名を付けてうまく動かなかったよ
すぐ参照できる一覧とかねーのかよ
つーかPHPてnamespaceないわけ?なにこの糞言語
0252nobodyさん2011/12/15(木) 12:26:04.28ID:???
>>251
PHP5.3以降ではnamespace使えるけど、
Cake2.0は動作環境にPHP5.2系も入れてるので互換性のために仕方ない部分もあるのでは。

FuelPHPみたいに最初からPHP5.3以降で作られてるやつはコアでnamespaceサポートされてたりするし。
0253nobodyさん2011/12/15(木) 13:24:42.38ID:???
PHPって後からつけたしつけたし、つぎはぎみたいな言語だし
フレームワークは苦労するわな
0254nobodyさん2011/12/15(木) 17:12:04.31ID:???
>>250
やっぱそうなのか
一つのモデルに対して、同名のコントローラーとコンポーネントを作れると名前がそろっていて綺麗なんだがなあ・・・

たとえばUserModelに対してeat_cake_countをアップデートする処理とかはUserComponentに書きたい
そういうときはUsersComponentって名前にすればいいのかな
なんかその辺のコンポーネントの分け方(ネーミングルール)のセオリーみたいなのがよくわからないんだよね
UpdateComponentって分け方にすると、とんでもなく巨大なファイルになりそうだし
0255nobodyさん2011/12/15(木) 17:32:59.52ID:???
それはモデルに書くべきじゃないの?
コントローラーは薄く、モデルは厚く
0256nobodyさん2011/12/15(木) 18:14:13.62ID:???
>>251

せめて

function actionIndex()
function actionView()

みたいな作りになってればいいんだけどね。
0257nobodyさん2011/12/16(金) 13:25:33.43ID:???
Modelの中身が突如出力されだしたんですが消し方知ってる方いませんか?
http://www.dotup.org/uploda/www.dotup.org2386365.png

0258257 2011/12/16(金) 13:34:08.67ID:???
自己解決 <php がありませんでしたw
0259nobodyさん2011/12/16(金) 19:10:30.97ID:???
1つのレコードの1つのカラムを更新したい場合、
findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0260nobodyさん2011/12/16(金) 21:55:12.50ID:???
<php じゃ動きません
0261nobodyさん2011/12/16(金) 22:46:31.07ID:???
一人で開発する分にはフレームワークいらない
CakePHPだと逆に遅くなる。
PHPは頭よりも手を動かしてなんぼだと思う。
フレームワークは頭を動かす比重が大きくなる。
設計部分が特にそう。
極端に言えば変数が上書きされないようクラス化しておけば実運用では問題ない。
スパッティーコードにもメリットはあって頭使わなくても最速でコーディングできる。
関数の共通化を考える時間があれば手を動かしてた方がいい。後でリファクタリングで十分。
0262nobodyさん2011/12/16(金) 23:38:25.39ID:???
一生のうちPHPで書くアプリケーションが3つほどまでで、書き直しを一切しないというなら完全に同意してもいい
0263nobodyさん2011/12/17(土) 00:03:51.26ID:???
>スパッティーコードにもメリットはあって頭使わなくても最速でコーディングできる。
ワロタ
学生の課題ならそれでいいんじゃね
0264nobodyさん2011/12/17(土) 06:04:20.02ID:???
セッションが設定した時間内で切れてしまうのですが、
原因として何が考えられますか?

core.phpでは以下のようになっています。
Configure::write('Session.timeout', '31536000');
Configure::write('Session.start', true);
Configure::write('Security.level', 'low');

ちなみに、サーバーにアップロードすると自動的に切れてしまうのですが、
ローカルでは大丈夫(もしくは切れるまでの時間が長い)なんですよね・・・
0265nobodyさん2011/12/17(土) 06:11:18.00ID:???
Configure::write('Session.save', 'php');
Configure::write('Session.checkAgent', true);
あと関連しそうな設定は上記になっています。忘れていました。
他のsession関連の設定はコメントアウトされています。
0266nobodyさん2011/12/17(土) 09:24:53.68ID:???
1つのレコードの1つのカラムを更新したい場合、
findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0267nobodyさん2011/12/17(土) 11:42:27.08ID:???
>>266
findする意味がわかんないんだけど。
saveするだけが一番早いだろうに。
■ このスレッドは過去ログ倉庫に格納されています