【PHP】フレームワーク CakePHP 13ホール目【v2.0】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/09(水) 01:05:10.60ID:???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/
0192191
2011/12/04(日) 15:50:38.27ID:???コントローラ値が空なだけだと思ったら、どうやたapp_controller自体実行されてなかったようです
(普通に文字を出力させてもでませんでした)
御教示いただけたら幸いです
0193nobodyさん
2011/12/04(日) 15:54:37.24ID:???コントローラ内のbeforeFilter内で
parent::beforeFilter();
ってやってる?
0194191
2011/12/04(日) 16:19:33.30ID:???それでした
app_controllerを作ったのがはじめてだったので、決まりごとを理解してませんでした
ありがとう御座いました
0195nobodyさん
2011/12/07(水) 14:22:49.37ID:XLyuG92u通常のデータは以下のようなことで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:???0198nobodyさん
2011/12/07(水) 21:33:41.84ID:???0199nobodyさん
2011/12/07(水) 23:38:47.74ID:???controllerかmodelで分岐させて、controllerでset
viewの出したい箇所に変数を<?php echo $message ?>
0201199
2011/12/07(水) 23:45:59.78ID:???viewの方にもif(isset())で文字列またはarray(リスト表現)
0202nobodyさん
2011/12/08(木) 01:31:10.64ID:???PHP5.3の恩恵を受けることのできるフレームワークはfuelphpしかない。
CakePHPの時代も終わりか。
0203nobodyさん
2011/12/08(木) 01:32:48.80ID:???スレあるんなら誘導してくれよ
【php】fuelphpについて語ろうぜ
http://hibari.2ch.net/test/read.cgi/php/1321843505/
0204nobodyさん
2011/12/08(木) 01:37:07.11ID:???0205nobodyさん
2011/12/08(木) 02:27:45.30ID:???LAMP環境で
var $components = array('DebugKit.Toolbar');
とAppControllerに書くと、画面が真っ白になる・・・
xampp環境だと問題ないんだけど。
0206nobodyさん
2011/12/08(木) 02:47:03.37ID:???0207nobodyさん
2011/12/08(木) 09:13:39.91ID:???技術情報とかぐぐっても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かとか、大きな違いで戸惑うと思うけどなあ
他にも色々変わっていて困ったことがあった
0212nobodyさん
2011/12/10(土) 06:31:35.05ID:dP9DBevcどんだけ情報少ないんだよ。
ちんたらしてるとユーザー逃げるぞ。
0213nobodyさん
2011/12/10(土) 19:52:45.95ID:???0214nobodyさん
2011/12/10(土) 21:39:38.00ID:XSFB8P6r使おうとしてるんですがうまくいきません。
「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:???使ったことないからわからんけど、軽くググった感じだと、たぶんファイルの書き出し先がちゃんと指定されてないんじゃね
0216nobodyさん
2011/12/11(日) 18:29:54.09ID:???なにか原因としてかんがえられますか
0217216
2011/12/11(日) 19:19:22.12ID:???Cookie削除したら解決しました
0219nobodyさん
2011/12/11(日) 20:56:58.63ID:???レスありがとう御座います。
現状を報告すると、
xamppのtempフォルダまではちゃんと、ファイルが上がってました。
しかしそこからプラグインが指定している、weroot/media/transfer/img/
フォルダには移動されていませんでした。
パーミッションを777にしても駄目だったので今からソースを追ってみます。
進展があったらまた、こちらに報告します。
0221215
2011/12/11(日) 21:11:51.64ID:???サーバー側までファイルは来ていて意図するところに書き出せないと言うことは、やっぱりそういうtypo系のミスじゃないかなー
あとはファイルを置くディレクトリの階層浅くして別のところに作って試してみるとか
0222nobodyさん
2011/12/11(日) 21:43:21.91ID:???少し進展があったのでご報告します。
今までチュートリアル系のブログを見ながら試していたのですが
最新のヘルプを見ると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:???おすすめがあるとしたら何でしょうか?
移植のしやすさと得られるパフォーマンスの改善のバランスが良いもの
んなもん経験者にしかわからんと思うが、もしいたら
0224nobodyさん
2011/12/12(月) 11:29:31.97ID:???Cakeの実行速度を上げる方法を学んだ方が良いですよ。
0225nobodyさん
2011/12/12(月) 13:18:51.48ID:???どこがネックで遅いのか書くとより良い回答が期待できると思う。
どこがネックかもわかってないなら、まずやることはフレームワークの移行ではない。
0226nobodyさん
2011/12/12(月) 13:33:57.79ID:???0227222
2011/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:???0232nobodyさん
2011/12/12(月) 18:22:41.27ID:???DB接続できないとモデルのコンストラクタがエラーになって、そこで処理が止まっちまいます
これを避けるにはcake以下を直接書き換えるしかない?
0233nobodyさん
2011/12/12(月) 22:02:32.47ID:???0234nobodyさん
2011/12/12(月) 22:15:59.53ID:???0235222
2011/12/12(月) 22:21:11.57ID:???セキュリティ的にちゃんとした物が書ける自信がなかったので
プラグイン使おうと思いました。
>>230
今回は裏目に出たけど、他人のソースを読めてよかったと思う事にします。
画像うpについては↓のプラグインがさくっと動いたので今回はこれで行く事にします。
ttps://github.com/fusic/filebinder
制作者様(?)の解説動画↓
ttp://zenpre.net/p/Gacui
では、名無しに戻ります。お騒がせしました。
0236nobodyさん
2011/12/12(月) 22:26:02.72ID:???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:???0240nobodyさん
2011/12/13(火) 15:53:33.42ID:???0242nobodyさん
2011/12/14(水) 00:20:14.28ID:???自分の中で80くらいがんばって無理だったらネットで質問しつつ後の20の努力をする。
質問に回答もなく、後の20がんばっても無理だったら諦めて違う方法を模索する。
0243nobodyさん
2011/12/14(水) 01:34:17.83ID:???0244nobodyさん
2011/12/14(水) 17:39:11.08ID:???0245nobodyさん
2011/12/14(水) 17:40:34.96ID:???モデルに変数でデータを入れててコントローラーからそれらの変数を取得ってできないの?
0246nobodyさん
2011/12/14(水) 17:41:52.04ID:???あと、データベース使わなくても使えるよ。
0247nobodyさん
2011/12/14(水) 23:57:19.24ID:???間違った考えが広まってしまったよな。
0248nobodyさん
2011/12/15(木) 00:06:20.83ID:???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:???すぐ参照できる一覧とかねーのかよ
つーかPHPてnamespaceないわけ?なにこの糞言語
0252nobodyさん
2011/12/15(木) 12:26:04.28ID:???PHP5.3以降ではnamespace使えるけど、
Cake2.0は動作環境にPHP5.2系も入れてるので互換性のために仕方ない部分もあるのでは。
FuelPHPみたいに最初からPHP5.3以降で作られてるやつはコアでnamespaceサポートされてたりするし。
0253nobodyさん
2011/12/15(木) 13:24:42.38ID:???フレームワークは苦労するわな
0254nobodyさん
2011/12/15(木) 17:12:04.31ID:???やっぱそうなのか
一つのモデルに対して、同名のコントローラーとコンポーネントを作れると名前がそろっていて綺麗なんだがなあ・・・
たとえばUserModelに対してeat_cake_countをアップデートする処理とかはUserComponentに書きたい
そういうときはUsersComponentって名前にすればいいのかな
なんかその辺のコンポーネントの分け方(ネーミングルール)のセオリーみたいなのがよくわからないんだよね
UpdateComponentって分け方にすると、とんでもなく巨大なファイルになりそうだし
0255nobodyさん
2011/12/15(木) 17:32:59.52ID:???コントローラーは薄く、モデルは厚く
0256nobodyさん
2011/12/15(木) 18:14:13.62ID:???せめて
function actionIndex()
function actionView()
みたいな作りになってればいいんだけどね。
0257nobodyさん
2011/12/16(金) 13:25:33.43ID:???http://www.dotup.org/uploda/www.dotup.org2386365.png
0258257
2011/12/16(金) 13:34:08.67ID:???0259nobodyさん
2011/12/16(金) 19:10:30.97ID:???findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0260nobodyさん
2011/12/16(金) 21:55:12.50ID:???0261nobodyさん
2011/12/16(金) 22:46:31.07ID:???CakePHPだと逆に遅くなる。
PHPは頭よりも手を動かしてなんぼだと思う。
フレームワークは頭を動かす比重が大きくなる。
設計部分が特にそう。
極端に言えば変数が上書きされないようクラス化しておけば実運用では問題ない。
スパッティーコードにもメリットはあって頭使わなくても最速でコーディングできる。
関数の共通化を考える時間があれば手を動かしてた方がいい。後でリファクタリングで十分。
0262nobodyさん
2011/12/16(金) 23:38:25.39ID:???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.checkAgent', true);
あと関連しそうな設定は上記になっています。忘れていました。
他のsession関連の設定はコメントアウトされています。
0266nobodyさん
2011/12/17(土) 09:24:53.68ID:???findで目的のレコードを取り出してsaveするのと
updateAllで1つだけ更新するのとでは、どちらが速いですか?
0268nobodyさん
2011/12/17(土) 14:55:06.91ID:???update posts set title = 'hogehoge' where id = 5;
と
update posts set title = 'hogehoge' where user_id = 3;
さてどっちが速いかね
0269nobodyさん
2011/12/17(土) 15:59:01.03ID:???0272nobodyさん
2011/12/17(土) 19:59:48.04ID:6Ny+9Cbjこれ消す方法ないですか?
0274nobodyさん
2011/12/18(日) 04:48:44.53ID:9T9v3cA3arning (512): _cake_model_ cache was unable to write 'default_"xxx"' to File cache [CORE\Cake\Cache\Cache.php, line 310]
みたいな警告が出るんですが同じ症状の人いません?
0275nobodyさん
2011/12/18(日) 18:19:44.28ID:???どこが遅いかの原因解明をまず行うべきです。
SQLレベルなのか、画面描画なのか、CakePHPのせいなのかetc
ユーザー数増加によるアクセス過多も問題になることはありますね。
根本的に解決しない可能性もあります。
0276nobodyさん
2011/12/18(日) 18:27:15.86ID:???やりたい事をそのまま2つの処理で書いて、debugでSQLが出力されますので、
それをMySQLのオプティマイザーなどの時間が計測できる機能で実際に試してみては?
レコード数の多い・少ないにも関連しそうなので、
テストする際には1か月後、1年後などの予測されるレコード数で実行することを忘れずに。
0277nobodyさん
2011/12/19(月) 21:46:59.93ID:???やりたいことは、特定のタグを持った投稿を取得する、という単純なものです。
配列は以下のようになっていて、ConditionにTag.name => $tagname などとしても取得できませんでした
Array
(
[0] => Array
(
[Post] => Array
(
[id] => 60089
[message] => testtest
)
[Tag] => Array
(
[0] => Array
(
[id] => 8
[name] => タグ1
[PostTag] => Array
(
[id] => 26
[post_id] => 60089
[tag_id] => 8
)
)
[1] => Array
:
:
)
)
0279nobodyさん
2011/12/20(火) 05:19:51.29ID:???0280nobodyさん
2011/12/20(火) 11:14:14.85ID:???SQLでとってくる方法はないですか?
「タグ1と関連づいた投稿を全て取得する」というfindができれば教えてほしいんですが、、、
0281nobodyさん
2011/12/20(火) 11:48:28.25ID:???モデル名のキーが頭に付くのがジャマでしょうがないよね
仕方ないからいつもこうやってる
$data = $this->find( ....
$data = $data['モデル名'];
0284nobodyさん
2011/12/20(火) 14:59:31.58ID:???俺は↓する
$data = $this->User->find('all');
$user_data = $data['User']
これだとどのモデルか分かりやすいし。
ただし、アソシエーション使ってる場合などは、適切でないかも。
0285nobodyさん
2011/12/20(火) 16:07:14.62ID:???$this->data = $data
ってやると、formヘルパーの値valueに自動でセットするためにキーがついてからね。
おれはあんまり気にしたことがない。
0286nobodyさん
2011/12/20(火) 17:30:41.74ID:???find('all');ってテーブルの全レコード取り出してるの?
あんまりそういう機会ないなあ
あとfind('all')だと配列が返ってくるから、2行目はエラーになるんじゃないか
0288nobodyさん
2011/12/21(水) 08:45:16.75ID:???0289nobodyさん
2011/12/21(水) 10:15:07.10ID:???Configure::write('Session.timeout', '31536000');
↑これってセッションファイルが破棄されるまでの時間じゃないのかよ!!!ややこしすぎ
0291nobodyさん
2011/12/21(水) 14:24:31.11ID:???紹介している人のブログ見たけど、いまいち何が捗るのか分からん
別に配列で指定しても見た目で分かるじゃん。
■ このスレッドは過去ログ倉庫に格納されています