【PHP】フレームワーク CakePHP 2ホール目
レス数が950を超えています。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/
0872nobodyさん
2008/03/07(金) 14:59:15ID:???教えて頂いたお礼に 頑張ってまとめてアップしてみたいと思います。
CakeWebTestCase ← これいいっすね。
0874871
2008/03/07(金) 16:43:55ID:???function temp(
return $myDefines['aaa']['bbb'] = array(
'a' => 'あ',
'b' => 'びー',
);
);
0876871
2008/03/07(金) 18:59:05ID:???うへぇ
enum型の表示名とかがおもです。
define使えば問題なく使えるんですが、配列で欲しいわけです。
globalなんてしたくないし・・・。
ダメですかねーん?
0877875
2008/03/07(金) 19:48:19ID:???言った本人が言うのもなんだけど、どうなんだろう?
どうも最近そういうグローバルな値なんて使わないもので、
enum型もほしいと思ったことが無いんだよな。
そういうのは大体クラス内部で収まっているし。
設定ファイルに書いて、必要な箇所(関数の頭かクラスのコンストラクタ)で
読み込むことが多いし。でも確かに少量ならbootstrapに書いたほうがいい気もする。
なんだろう。このもやもや。
0878nobodyさん
2008/03/07(金) 20:35:01ID:???0881nobodyさん
2008/03/08(土) 16:58:13ID:???http://book.cakephp.org/view/39/configuration
0883nobodyさん
2008/03/09(日) 07:54:39ID:???グローバルな値はCakePHPがデェフォでかなり埋め込んでるけどな
グローバルを全く使わないって発想はCakePHPを否定してるよな
0884nobodyさん
2008/03/09(日) 08:01:58ID:???おまいらのクラス定義は全部グローバルやんwww
CakePHPは名前空間を使ってないグローバルなフレームワークやんwww
なにを今さらグローバル気にしてんねん
0885nobodyさん
2008/03/09(日) 08:24:21ID:???こんなグローバル指向なフレームワーク使うんやったら
自分でフレームワーク作った方がマシやろ
0886nobodyさん
2008/03/09(日) 10:41:20ID:???クローバスクラス定義は普通のもの。
0887nobodyさん
2008/03/09(日) 19:37:33ID:???全く無いのもダメだろ要はバランス
CakePHPのような最初から骨組みが決定してるものは
仕様方針と骨組みが多少異なれば
はみだしたこともしないといけない
0888nobodyさん
2008/03/09(日) 19:42:05ID:???要はスクリプト言語のメリットを活かし
プログラム言語のような複雑化を避けるため
グローバルを気にして設計するなら
Javaとかに移るべき
PHPはグローバルを使うことでメリットのある言語
0889nobodyさん
2008/03/09(日) 19:45:41ID:???それなのにRailsの影響でフレームワーク化してるけど
PHPの方が全く追いついてない状態
0890nobodyさん
2008/03/09(日) 19:51:46ID:???global ってキーワードを使った記憶がないんだが?
0891nobodyさん
2008/03/09(日) 20:04:12ID:???グローバル変数なくても作れるね。
0892nobodyさん
2008/03/09(日) 20:08:55ID:???なぜならPHP自体がしっかりしてないんだから
グローバル変数使いまくりの方がPHPにはメリットがある
Railsのマネするなら
Rubyみたいにしっかりとしたオブジェクト指向言語じゃないと
0893nobodyさん
2008/03/09(日) 20:32:06ID:???小さい掲示板つくるだけで、こんなに余計なグローバル変数定義されるのかよ
0894nobodyさん
2008/03/09(日) 20:48:54ID:???symfonyなんて律儀に使った変数をunsetしていくのにwww
0895nobodyさん
2008/03/09(日) 21:00:06ID:???0896nobodyさん
2008/03/09(日) 21:20:15ID:???0897nobodyさん
2008/03/09(日) 21:21:07ID:???お前、PHP知らないだろ?w
PHPではグローバル変数を使うときには、
global って書かないといけないんだよ。
だから使っていて、知らないということはありえない。
CakePHPでは、globalを使わなくて作れるのは事実。
0898nobodyさん
2008/03/09(日) 21:27:54ID:???一箇所しか、使っていなかったな。
その一箇所も、ADODB用のデータベースライブラリで
ADODBの動作モードを変更するためのだけのコード。
0900nobodyさん
2008/03/09(日) 21:57:23ID:???0901nobodyさん
2008/03/09(日) 22:00:31ID:???0902nobodyさん
2008/03/09(日) 22:02:01ID:???グローバル変数
変数にはスコープと呼ばれる有効範囲があります。
スコープの最も外側の部分、 スクリプト中でどの関数にも含まれていない部分で
定義された変数をグローバ ル変数とよびます。
0904nobodyさん
2008/03/09(日) 22:04:30ID:???たとえば、コントローラクラスなどの
<?php
class XXXController extends AppController {
}
?>
の<?php と classの間とか。
まあ、普通はこんなところに、書かないよね?
0907nobodyさん
2008/03/09(日) 22:08:05ID:???どこか間違っているか?
CakePHPでは、作るコードのほぼすべてを
クラスとしてつくり、普通の作り方をすると、
グローバル変数なんか使わないだろ?
0909nobodyさん
2008/03/09(日) 22:21:11ID:???global 変数名 ってしないと参照できないって仕様、
最初はウザイと思っていたが、グローバル変数使わなくなってからは
どうでもよくなったな。これもCakePHPのおかげかな?
0911nobodyさん
2008/03/09(日) 22:37:41ID:???変数宣言してる行数
2000行見つけたんですが!
ちなみに変数名は
$config
これって各クラスでグローバル参照できる変数だよね
0912nobodyさん
2008/03/09(日) 22:38:56ID:???CakePHPというオブジェクト指向のフレームワークのおかげで、
クラスを使ってコアのクラスを継承して実装することが求められ、
必要な値が、クラス変数に格納されるから、しっかりした作り方ができる。
0913nobodyさん
2008/03/09(日) 22:40:31ID:???変数名でグローバルかどうかなんてわかるはずないだろw
それがどのファイルに定義されていたのか
なぜ、それをいえない?
0914nobodyさん
2008/03/09(日) 22:45:26ID:???「変数宣言している行数2000行、その変数名は$config」の時点で
嘘だとばれるだろ。常識で考えて。
0915nobodyさん
2008/03/09(日) 22:51:21ID:???恐ろしいほどスコープに括られてない変数(グローバル変数?)がある
0917nobodyさん
2008/03/09(日) 22:59:32ID:???簡単に言うと、このようにローカル変数として展開されている。
class ??? {
function ??? () {
include(そのファイル)
}
}
一見、ファイルだけを見て、それがクラスの中にないからといって、
それがグローバル変数だとは限らないんですよ。
アフォが自滅して終わりです。ちゃんちゃん。
0919nobodyさん
2008/03/09(日) 23:03:54ID:???0920nobodyさん
2008/03/09(日) 23:11:12ID:???これはクラス外で宣言してるのは何で?
0921nobodyさん
2008/03/09(日) 23:15:12ID:???0922nobodyさん
2008/03/09(日) 23:15:16ID:???そのファイルも、ほかのクラスの関数から
読み込まれているからローカル変数になっている。
それがグローバル変数だと思ったら、どこかの関数で
global その変数名; って書いて、実際にその変数を参照できるか調べろよ。
(別に関数じゃなくても、変数定義されている、そのファイル自身と
そのファイルの呼び出し元関数以外ならどこでもいいが)
できないからさ。
0924nobodyさん
2008/03/09(日) 23:24:41ID:???クラス定義されてるファイルを
クラスから呼び出すということは
クラス内でクラスを作るということになるんだが?
a.inc
<?php
$a="a";
class A{
}
?>
class A {
include "a.inc";
}
0925nobodyさん
2008/03/09(日) 23:28:52ID:???i18n.phpのvar $tasks = array('DbConfig', 'Extract');変数設定により、
フレームワークから読み込まれていますが?
0926nobodyさん
2008/03/09(日) 23:34:25ID:???globalキーワードがついていない、変数定義は
ほぼすべて、グローバル変数ではないと思っていい。
フロントコントローラとは、要するに、どのアドレスでアクセスしても、
まず最初に、index.php といった決まった、phpスクリプトが呼ばれる。
そこからユーザーが作ったコードは、関数の中から呼び出された関数の
そのまた中の関数から呼ばれた関数の・・・といくつかの関数(当然メソッド含む)を経て実行される。
つまり、ほとんどが、関数内に読み込まれるファイルとして成り立っているので、
その関数内スコープで、グローバル変数を定義するには、globalキーワードが必要不可欠。
globalキーワードを使わずに、グローバル変数を作るには、どの関数からも呼ばれていない
index.php ぐらいで定義するしかない。
0929nobodyさん
2008/03/09(日) 23:37:22ID:???そのクラスの継承元クラスが、その変数の値を見て、
その名前からファイル名に変換して、
そのファイルを呼び出す関数に渡して、その関数が読み込んでいます。
意味、わかりますか?
0931nobodyさん
2008/03/09(日) 23:42:19ID:???マニュアルぐらい嫁。
http://www.php.net/include/
ファイルが読み込まれるとそのファイルに含まれるコードは、
include()もしくはrequire()が実行された 行の変数スコープを継承します。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
しかし、読み込まれたファイル内で定義されている
関数やクラスはすべて グローバルスコープとなります。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0934nobodyさん
2008/03/09(日) 23:45:59ID:???正確に言えば、こフレームワークのことは忘れて、
そういうコードがあったとして、そのファイルをURL指定で
直接アクセスされた場合、確かにグローバル変数になる。
しかし、CakePHPではフロントコントローラ。
つまり、>>904のファイルは、index.phpを基点として
いくつかの関数を経て呼び出されるから、
それがグローバル変数になることはない。
0936nobodyさん
2008/03/09(日) 23:51:57ID:???0939nobodyさん
2008/03/10(月) 00:00:57ID:???i18n.phpの親クラスのshellにrequire_onceって書いてあるだろ。
App::importは使ってないなw
0942nobodyさん
2008/03/10(月) 00:09:38ID:???違うよね? じゃあ。俺の言っていることは
最終的にただしかったんじゃんか。
CakePHPはちゃんとしたオブジェクト指向。
当然グローバル変数もほぼ使わずに作られている。
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:???DBからデータを持ってくるんだけど、画面によって表示するデータがちょっと違う時ってどうしてますか?
1 - データを取得するメソッドを1個作って、後はViewで調整(使わないデータを持ってくるのがもったいない)
2 - Viewごとにデータを取得するメソッドを複数作る(コードが増える、DBの仕様が変わると作業量が増える)
考え方をお聞かせください。
0950nobodyさん
2008/03/11(火) 14:51:27ID:???引数でconditionsなりfieldsなり変えればいいんじゃね
0951nobodyさん
2008/03/11(火) 17:42:25ID:???どっちもいいと思う。
だけど view で調整のが楽かなぁとも思うし、モデルに書いておいた方が楽なような。
0953nobodyさん
2008/03/12(水) 15:16:31ID:AyOV8gPTで、Bの hoge というフィールドが n の場合という条件を
WHERE句にいれる場合は findAll でどうやればいいのでしょうか?
0954953
2008/03/12(水) 15:22:10ID:???ちなみに、モデルで conditions を指定するやり方ではなくて
B.hoge = n に該当する Aレコードを取得したい、ということです。
0955nobodyさん
2008/03/12(水) 17:07:21ID:???必要なテーブルだけ関連付けてviewで調整してる
テーブルの中のカラムは富豪的に全部持ってきてもバチ当たらないだろ
>953-954
findする前にbindmodelでくっつけてやるのれす
あとそのままだとleftjoinだからinnerjoinにでもしてやればいいんじゃないのかな
でもそんなの調べてる間にSQL書いちゃう方がはえーよたぶん
0956nobodyさん
2008/03/12(水) 21:50:06ID:???をワンセットでやりたい場合はアソシエーション機能を使うのが便利だけど
テーブル結合させたカウントランキング表示みたいな
表示だけにしか使わない複雑なものはSQLで書いた方が効率いいのかな?
これって書き込み編集削除で再利用できないし
0957nobodyさん
2008/03/12(水) 22:19:07ID:???0959nobodyさん
2008/03/13(木) 01:07:36ID:???conditionsに書けばできるのは知っているんだが、
へんな書き方をしないといけないし。
0960nobodyさん
2008/03/13(木) 01:15:18ID:Kbjia7GdEntryモデルとUserモデルという、2つのモデルがあるとして、
以下のようなことをすると、
--------------------
[1] Entryのデータを編集(/entries/edit/1)
↓
[2] Entryのデータを確認(/entries/index、/entries/view/1)
↓
[3] Userから確認(/users/myentries)
--------------------
[2]では即時に[1]での編集内容が反映されるのですが、
[3]では反映されず表示が古いままなんですが、これって何のキャッシュですか?
アクセス元(?)のモデルが違うだけなのにどうして表示される結果が違うんでしょうか?
まだ始めたばかりなので、もし見当違いな質問してたら申し訳ありません、
ヒントだけでも示してもらえると助かります。
0962nobodyさん
2008/03/13(木) 04:04:24ID:???Cakeの場合こういうのは何処に置いたらいいの?
通常のWebサービスと同じくコントローラ作ってそこに書くのが定石?
0963962
2008/03/13(木) 04:19:53ID:???クラス外でhandleCallしたりしなきゃだからベンダーに置くしかないのかな。
0964953
2008/03/13(木) 09:23:03ID:???ありがとです。
とりあえずINNER JOINで解決しました。
やっぱりSQL書いた方が早い&分かりやすいですねぇ。
フレームワーク初めてだから、ついつい全てルールに沿ってやろうと考えてしまう…。
0965nobodyさん
2008/03/13(木) 12:37:07ID:???ビヘイビアのafterFindとかは、モデルごとに呼び出されるのか、
親モデルで一回だけ呼び出されるのか仕様知らない?
たしか親モデルで一回だけ呼び出されるような感じなんだが、
1.2はbetaだし、それがバグなのか仕様なのかわからない。
0966nobodyさん
2008/03/13(木) 15:13:16ID:ERgQfDPOデバッグモードにして投げてるSQL分を追跡してみれば?
というアドバイスはナンセンス?
0967nobodyさん
2008/03/14(金) 10:50:23ID:???8Mじゃすぐリミットオーバーするね
0968nobodyさん
2008/03/14(金) 10:59:44ID:???アソシエーションは便利だけど、ちょっと利用させてもうらために
無駄なSQLもくっついてくるのを我慢しないといけない
0969nobodyさん
2008/03/14(金) 11:01:09ID:???モデルまわりの統制がとれない
0970nobodyさん
2008/03/14(金) 11:10:06ID:???悪魔でも生産性だけを考えた外注用のフレームワークだな
0971nobodyさん
2008/03/14(金) 11:22:16ID:???していく奴がわいているなw
いつも同じ感じだからすぐばれるぜwww
レス数が950を超えています。1000を超えると書き込みができなくなります。