トップページphp
1001コメント315KB

【PHP】フレームワーク CakePHP 2ホール目

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2007/11/14(水) 02:50:28ID:???
本家
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/
0907nobodyさん2008/03/09(日) 22:08:05ID:???
>>905
どこか間違っているか?

CakePHPでは、作るコードのほぼすべてを
クラスとしてつくり、普通の作り方をすると、
グローバル変数なんか使わないだろ?
0908nobodyさん2008/03/09(日) 22:08:55ID:???
>>906
どこ?
0909nobodyさん2008/03/09(日) 22:21:11ID:???
関数内でグローバル変数を参照するとき、
global 変数名 ってしないと参照できないって仕様、
最初はウザイと思っていたが、グローバル変数使わなくなってからは
どうでもよくなったな。これもCakePHPのおかげかな?
0910nobodyさん2008/03/09(日) 22:30:37ID:???
>>909
それはCakePHPのおかげというのがよくわからない・・・
0911nobodyさん2008/03/09(日) 22:37:41ID:???
クラス外変数(グローバル変数?)の定義ファイルで
変数宣言してる行数
2000行見つけたんですが!
ちなみに変数名は
$config
これって各クラスでグローバル参照できる変数だよね
0912nobodyさん2008/03/09(日) 22:38:56ID:???
>>910

CakePHPというオブジェクト指向のフレームワークのおかげで、
クラスを使ってコアのクラスを継承して実装することが求められ、
必要な値が、クラス変数に格納されるから、しっかりした作り方ができる。
0913nobodyさん2008/03/09(日) 22:40:31ID:???
>>911

変数名でグローバルかどうかなんてわかるはずないだろw
それがどのファイルに定義されていたのか
なぜ、それをいえない?
0914nobodyさん2008/03/09(日) 22:45:26ID:???
本来、一つ宣言すれば十分なグローバル変数が
「変数宣言している行数2000行、その変数名は$config」の時点で
嘘だとばれるだろ。常識で考えて。
0915nobodyさん2008/03/09(日) 22:51:21ID:???
確かにcasefoldingフォルダの中に
恐ろしいほどスコープに括られてない変数(グローバル変数?)がある
0916nobodyさん2008/03/09(日) 22:52:20ID:???
>>915
ホントだw
0917nobodyさん2008/03/09(日) 22:59:32ID:???
きっとそれをグローバル変数だと勘違いしているのだろうが、

簡単に言うと、このようにローカル変数として展開されている。
class ??? {
 function ??? () {
  include(そのファイル)
 }
}

一見、ファイルだけを見て、それがクラスの中にないからといって、
それがグローバル変数だとは限らないんですよ。

アフォが自滅して終わりです。ちゃんちゃん。
0918nobodyさん2008/03/09(日) 23:02:26ID:???
>>917
どのファイル?
0919nobodyさん2008/03/09(日) 23:03:54ID:???
string.php
0920nobodyさん2008/03/09(日) 23:11:12ID:???
extract.php

これはクラス外で宣言してるのは何で?
0921nobodyさん2008/03/09(日) 23:15:12ID:???
cakeが黒こげwww
0922nobodyさん2008/03/09(日) 23:15:16ID:???
>>920
そのファイルも、ほかのクラスの関数から
読み込まれているからローカル変数になっている。

それがグローバル変数だと思ったら、どこかの関数で
global その変数名; って書いて、実際にその変数を参照できるか調べろよ。
(別に関数じゃなくても、変数定義されている、そのファイル自身と
そのファイルの呼び出し元関数以外ならどこでもいいが)

できないからさ。
0923nobodyさん2008/03/09(日) 23:20:07ID:???
>>922
どのクラス関数から読み込まれてるんだ?
調べたが、どのクラス関数からも呼び出されてないぞ
0924nobodyさん2008/03/09(日) 23:24:41ID:???
>>922
クラス定義されてるファイルを
クラスから呼び出すということは

クラス内でクラスを作るということになるんだが?

a.inc
<?php
$a="a";
class A{
}
?>

class A {

include "a.inc";

}
0925nobodyさん2008/03/09(日) 23:28:52ID:???
>>923
i18n.phpのvar $tasks = array('DbConfig', 'Extract');変数設定により、
フレームワークから読み込まれていますが?
0926nobodyさん2008/03/09(日) 23:34:25ID:???
フロントコントローラで作られたPHP製のアプリで
globalキーワードがついていない、変数定義は
ほぼすべて、グローバル変数ではないと思っていい。

フロントコントローラとは、要するに、どのアドレスでアクセスしても、
まず最初に、index.php といった決まった、phpスクリプトが呼ばれる。

そこからユーザーが作ったコードは、関数の中から呼び出された関数の
そのまた中の関数から呼ばれた関数の・・・といくつかの関数(当然メソッド含む)を経て実行される。
つまり、ほとんどが、関数内に読み込まれるファイルとして成り立っているので、
その関数内スコープで、グローバル変数を定義するには、globalキーワードが必要不可欠。

globalキーワードを使わずに、グローバル変数を作るには、どの関数からも呼ばれていない
index.php ぐらいで定義するしかない。
0927nobodyさん2008/03/09(日) 23:34:30ID:???
>>925
それは変数に値を入れてるだけじゃん
どうやって読み込んでるの?
0928nobodyさん2008/03/09(日) 23:35:40ID:???
>>924
だからなに?
クラス&関数と変数では、話が違うの知らないの?
0929nobodyさん2008/03/09(日) 23:37:22ID:???
>>927
そのクラスの継承元クラスが、その変数の値を見て、
その名前からファイル名に変換して、
そのファイルを呼び出す関数に渡して、その関数が読み込んでいます。

意味、わかりますか?
0930nobodyさん2008/03/09(日) 23:41:03ID:???
>>928
クラス内でクラスをincludeするって
内部クラスが利用できるってこと?
0931nobodyさん2008/03/09(日) 23:42:19ID:???
>>930
マニュアルぐらい嫁。

http://www.php.net/include/

ファイルが読み込まれるとそのファイルに含まれるコードは、
include()もしくはrequire()が実行された 行の変数スコープを継承します。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

しかし、読み込まれたファイル内で定義されている
関数やクラスはすべて グローバルスコープとなります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0932nobodyさん2008/03/09(日) 23:43:19ID:???
>>929

>>904でいう普通書かれないコードが
extract.phpに書かれてますが、これは何なんでしょう?
0933nobodyさん2008/03/09(日) 23:45:50ID:???
>>925
だからどこでincludeしてるの?
0934nobodyさん2008/03/09(日) 23:45:59ID:???
>>904が間違いってだけの話。

正確に言えば、こフレームワークのことは忘れて、
そういうコードがあったとして、そのファイルをURL指定で
直接アクセスされた場合、確かにグローバル変数になる。

しかし、CakePHPではフロントコントローラ。
つまり、>>904のファイルは、index.phpを基点として
いくつかの関数を経て呼び出されるから、
それがグローバル変数になることはない。
0935nobodyさん2008/03/09(日) 23:48:06ID:???
>>933
configure.php の App クラス の import メソッド
0936nobodyさん2008/03/09(日) 23:51:57ID:???
もうそろそろ、あらかたやっつけたかな?
0937nobodyさん2008/03/09(日) 23:56:41ID:???
>>935
そんな記述どこにあるんだ?
0938nobodyさん2008/03/09(日) 23:57:27ID:???
>>935
i18n.phpのどこに書いてあるんだ?
0939nobodyさん2008/03/10(月) 00:00:57ID:???
>>938
i18n.phpの親クラスのshellにrequire_onceって書いてあるだろ。

App::importは使ってないなw
0940nobodyさん2008/03/10(月) 00:07:10ID:???
>>939
お前の書いてること誤りばっかりやん
0941nobodyさん2008/03/10(月) 00:08:19ID:???
>>940
App::importだけだろ。
でお前の反論は、それで終わりか?
反論になってないがな
0942nobodyさん2008/03/10(月) 00:09:38ID:???
で、結局グローバル変数なの?
違うよね? じゃあ。俺の言っていることは
最終的にただしかったんじゃんか。

CakePHPはちゃんとしたオブジェクト指向。
当然グローバル変数もほぼ使わずに作られている。
0943nobodyさん2008/03/10(月) 00:10:49ID:???
>>942
じゃあグローバル変数を1個でも見つけたら俺が正しいの?
0944nobodyさん2008/03/10(月) 00:12:04ID:???
なんかお前ら暇なのな
0945nobodyさん2008/03/10(月) 01:51:21ID:???
このケーキってカビだらけなんですね
0946nobodyさん2008/03/10(月) 01:54:01ID:???
たとえコアにグローバル変数が山ほど使われていたとしても
デベロッパにそれを意識させず開発できるのなら問題ないと思うんだけど…
0947nobodyさん2008/03/10(月) 01:56:29ID:???
問題と思うなら放置しろよ釣られすぎだぞ
0948nobodyさん2008/03/10(月) 01:57:03ID:???
問題無いと・・
の間違いだふ
0949nobodyさん2008/03/11(火) 14:09:57ID:???
Cakeとは関係ないんだけど、質問させてください。

DBからデータを持ってくるんだけど、画面によって表示するデータがちょっと違う時ってどうしてますか?

1 - データを取得するメソッドを1個作って、後はViewで調整(使わないデータを持ってくるのがもったいない)
2 - Viewごとにデータを取得するメソッドを複数作る(コードが増える、DBの仕様が変わると作業量が増える)

考え方をお聞かせください。
0950nobodyさん2008/03/11(火) 14:51:27ID:???
前者
引数でconditionsなりfieldsなり変えればいいんじゃね
0951nobodyさん2008/03/11(火) 17:42:25ID:???
>>949
どっちもいいと思う。
だけど view で調整のが楽かなぁとも思うし、モデルに書いておいた方が楽なような。

0952nobodyさん2008/03/12(水) 04:14:55ID:???
>>949
条件がちょっと違うってだけじゃなんともいえん。
もっと具体的な例でないと
0953nobodyさん2008/03/12(水) 15:16:31ID:AyOV8gPT
hasManyでアソシエーションしている場合(A : 1/B : 多)
で、Bの hoge というフィールドが n の場合という条件を
WHERE句にいれる場合は findAll でどうやればいいのでしょうか?
09549532008/03/12(水) 15:22:10ID:???
>>953
ちなみに、モデルで conditions を指定するやり方ではなくて
B.hoge = n に該当する Aレコードを取得したい、ということです。
0955nobodyさん2008/03/12(水) 17:07:21ID:???
>949
必要なテーブルだけ関連付けてviewで調整してる
テーブルの中のカラムは富豪的に全部持ってきてもバチ当たらないだろ

>953-954
findする前にbindmodelでくっつけてやるのれす
あとそのままだとleftjoinだからinnerjoinにでもしてやればいいんじゃないのかな
でもそんなの調べてる間にSQL書いちゃう方がはえーよたぶん
0956nobodyさん2008/03/12(水) 21:50:06ID:???
書き込み、削除、編集、表示
をワンセットでやりたい場合はアソシエーション機能を使うのが便利だけど

テーブル結合させたカウントランキング表示みたいな
表示だけにしか使わない複雑なものはSQLで書いた方が効率いいのかな?
これって書き込み編集削除で再利用できないし
0957nobodyさん2008/03/12(水) 22:19:07ID:???
SQLで書いた方がというより、普通にfindでいいんじゃないの?
0958nobodyさん2008/03/12(水) 23:24:42ID:???
>>957
group by つかうときとか
0959nobodyさん2008/03/13(木) 01:07:36ID:???
なんでgroup by 正式にサポートしないんだろ?
conditionsに書けばできるのは知っているんだが、
へんな書き方をしないといけないし。
0960nobodyさん2008/03/13(木) 01:15:18ID:Kbjia7Gd
質問です。
EntryモデルとUserモデルという、2つのモデルがあるとして、
以下のようなことをすると、

--------------------
[1] Entryのデータを編集(/entries/edit/1)
 ↓
[2] Entryのデータを確認(/entries/index、/entries/view/1)
 ↓
[3] Userから確認(/users/myentries)
--------------------

[2]では即時に[1]での編集内容が反映されるのですが、
[3]では反映されず表示が古いままなんですが、これって何のキャッシュですか?
アクセス元(?)のモデルが違うだけなのにどうして表示される結果が違うんでしょうか?
まだ始めたばかりなので、もし見当違いな質問してたら申し訳ありません、
ヒントだけでも示してもらえると助かります。
0961nobodyさん2008/03/13(木) 01:24:22ID:???
>>960
F5
0962nobodyさん2008/03/13(木) 04:04:24ID:???
PEARみたいに外部から問い合わせて貰う為のXML-RPCを作成しようとおもっているのだけど、
Cakeの場合こういうのは何処に置いたらいいの?
通常のWebサービスと同じくコントローラ作ってそこに書くのが定石?
09639622008/03/13(木) 04:19:53ID:???
って書いてすぐ気が付いてしまった。
クラス外でhandleCallしたりしなきゃだからベンダーに置くしかないのかな。
09649532008/03/13(木) 09:23:03ID:???
>>955
ありがとです。
とりあえずINNER JOINで解決しました。
やっぱりSQL書いた方が早い&分かりやすいですねぇ。
フレームワーク初めてだから、ついつい全てルールに沿ってやろうと考えてしまう…。
0965nobodyさん2008/03/13(木) 12:37:07ID:???
複数のモデルをアソシエーションでつないだとき、
ビヘイビアのafterFindとかは、モデルごとに呼び出されるのか、
親モデルで一回だけ呼び出されるのか仕様知らない?

たしか親モデルで一回だけ呼び出されるような感じなんだが、
1.2はbetaだし、それがバグなのか仕様なのかわからない。
0966nobodyさん2008/03/13(木) 15:13:16ID:ERgQfDPO
>>965
デバッグモードにして投げてるSQL分を追跡してみれば?
というアドバイスはナンセンス?
0967nobodyさん2008/03/14(金) 10:50:23ID:???
CakePHPて恐ろしくメモリ食うな
8Mじゃすぐリミットオーバーするね
0968nobodyさん2008/03/14(金) 10:59:44ID:???
規模が少しでも大きくなるとモデルファイルが凄いみにくい状態になるなw
アソシエーションは便利だけど、ちょっと利用させてもうらために
無駄なSQLもくっついてくるのを我慢しないといけない
0969nobodyさん2008/03/14(金) 11:01:09ID:???
CakePHPは中規模でも使えないわ
モデルまわりの統制がとれない
0970nobodyさん2008/03/14(金) 11:10:06ID:???
とてもじゃないけど、こんな高負荷なフレームワークは自社で採用したくないな
悪魔でも生産性だけを考えた外注用のフレームワークだな
0971nobodyさん2008/03/14(金) 11:22:16ID:???
このごろ定期的に、CakePHPの根拠無しに批判を
していく奴がわいているなw
いつも同じ感じだからすぐばれるぜwww
0972nobodyさん2008/03/14(金) 11:30:51ID:???
エラー出力ありで開発するとデザインが崩れまくりなんですが
もっとよい出力場所がないのか?
0973nobodyさん2008/03/14(金) 11:32:06ID:???
希望としてはSQL出力は別画面表示してもらいたい
0974nobodyさん2008/03/14(金) 11:38:02ID:???
>>973
俺はSQL出力は、CSSとJavaScript使って折りたためるようにしているよ。

エラー(黄色い奴)はそもそも、なくさなきゃいけないものだし、
デザインが崩れるだけだからほうっておいている。
0975nobodyさん2008/03/14(金) 11:39:28ID:???
Core.phpでは
Configure::write('debug', 0);
と設定して
エラー表示したいコントローラーのメソッドの中で
Configure::write('debug', 2);
これ入れたり消したりしながら作業することにした
他に楽な方法あったら教えて
0976nobodyさん2008/03/14(金) 11:41:36ID:???
>>974
SQLだけ表示てどうやるんですか?
0977nobodyさん2008/03/14(金) 11:44:06ID:???
あとSQLに関してはCakePHPガイドブックに書いてあった、
SQLをログに記録するコラムを参考にdbo_mysqlを継承して
ログを取ることが出来るdbo_mysql_logを作った。

この本は1.1用で、1.2では少しフォルダ構造が違っているから説明しておくと
作ったdbo_mysql_log.phpは /app/models/datasources/dbo に置く。
これフォルダが無いけど、作ればちゃんと動くよ。
0978nobodyさん2008/03/14(金) 11:48:00ID:???
>>976
どうしても”SQLだけ表示”じゃないといけないのか?w

デバッグ用なんで力入れて作るものでもないから、
/app/views/layouts/default.ctp に CSSを付け加えて
display:noneで下のSQLの部分を非表示にし、同じく付け加えた
JavaScriptでON/OFFしているだけだけど。
0979nobodyさん2008/03/14(金) 11:58:52ID:???
コントローラ内で各ページで処理する関数を定義できるけど
コントローラにどのページをいれるべきなのか要領がつかめない
0980nobodyさん2008/03/14(金) 12:24:27ID:???
svnの設定もできて開発環境ばっちり
これからCakePHPをいじくりまわしてやるぞ
0981nobodyさん2008/03/14(金) 12:29:49ID:???
>>967
> CakePHPて恐ろしくメモリ食うな
> 8Mじゃすぐリミットオーバーするね

どっかのブログに書いてあった”間違い”を鵜呑みにするな。
バグで無限にメモリ消費しているだけだ。
0982nobodyさん2008/03/14(金) 14:52:16ID:???
>>981
967じゃないが
ググるとメモリ食うとかなり書いてあるんだけど。
素人書き込む場所ちゃうで
0983nobodyさん2008/03/14(金) 14:54:30ID:???
CakePHPの中規模以上で8Mで運営できてるやつおらんやろ?w
09849672008/03/14(金) 14:57:46ID:???
>>981
"Hello World!"を表示させたんですが!
0985nobodyさん2008/03/14(金) 14:59:06ID:???
8メガなんかで運用したいとか思ってる時点で、フレームワークやめろ
0986nobodyさん2008/03/14(金) 15:08:33ID:???
どうせウソだろと思って、ためしに4Mに制限して
やっているんだが、普通に動くんだが?

どういうことをしたらメモリが足りないのか書いてくれないと
誰も信用しない。

グーグルで検索したというのなら、当然それを見つけているはずなのだから、
どこに書いてあったかかけるはずだ。その書いてある記事を見て判断する。
0987nobodyさん2008/03/14(金) 15:10:03ID:???
>>983
質問するなよ。「俺は知らない」といっているのと同じ意味だぞw
0988nobodyさん2008/03/14(金) 15:24:23ID:???
CakePHPを使う大きな理由の一つがPHP4で動くということなんだから、
PHP4のデフォルトのmemory_limitの値、8Mで
CakePHPが動かないとしたらもっと話題になってるだろ。

常識で考えて。
0989nobodyさん2008/03/14(金) 22:10:57ID:???
嘘じゃなくて僕の環境も8Mオーバーはよくしますよ
フレームワークだからという結論で気にしてないのですが
0990nobodyさん2008/03/14(金) 22:12:25ID:???
googleで「cakephp メモリ」 と検索してみれば出てくるから
0991nobodyさん2008/03/14(金) 22:55:37ID:???
それで検索しても、信頼にたる情報はまったくないが?
0992nobodyさん2008/03/15(土) 01:17:46ID:???
>>991
頑固オヤジかw
素直になれよ、実際におこってるんだからしょうがないやん
0993nobodyさん2008/03/15(土) 01:29:06ID:???
まさかとは思うが、あの1行エントリが根拠とか言い出さないよな?
0994nobodyさん2008/03/15(土) 02:21:39ID:???
>>993
ブログラムの暴走じゃないのに8Mいくことがあるし
こんな現象はCakePHPだけ起こってるんだよ
PHPの実務経験8年ある俺が
暴走するプログラムつくるわけねーだろボケが
0995nobodyさん2008/03/15(土) 02:34:17ID:???
経験年数とか年がなんたらいうやつは大したことないのが世の常だが、確かにCakeはメモリーオーバーする。
大概はデバッガのせいかな。
0996nobodyさん2008/03/15(土) 02:37:44ID:???
>>994
知るかよw
cakeの肩を持つ訳ではないが。
0997nobodyさん2008/03/15(土) 02:44:27ID:???
ここは素人の集まりかよ
メモリオーバーするの俺だけじゃねーだろ?
おまいら見てるだけで実は作業してないんだろ
0998nobodyさん2008/03/15(土) 02:51:51ID:???
確かに私も最初にメモリオーバーしたよ
何でもプログラム暴走と決め付けるのはおかしいよ

常識的に考えて
0999nobodyさん2008/03/15(土) 02:53:34ID:???
a
1000nobodyさん2008/03/15(土) 02:53:55ID:???
>>996
おまえにいってないから死ねよ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。