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

【PHP】フレームワーク CakePHP 3ホール目【本命】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2008/03/14(金) 15:16:00ID:HF9x5ODX
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/

CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/

【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0855nobodyさん2008/05/24(土) 11:08:39ID:???
>>854
※ちょっとスレ違いでゴメン。

DI/AOPを使えば、ロジック層の前後で自動的にトランザクションの
開始とコミットを行うように設定できる。
だからロジック層では特にトランザクションを意識しないで
純粋にロジックだけを記述できる。
もし、ロジック層で例外が発生した場合は自動でロールバックもしてくれる。

他にもログの記述とかオブジェクト指向では対応できない
横断的な処理はAOPの機能を使ってメソッドの呼び出しの前後で
自動的に挟み込んでくれたりできる。

ってな感じでやってるとDI/AOP無しのアプリはきついなーと
思うんだけど、そこら辺はうまいやり方があるのかね?
0856nobodyさん2008/05/24(土) 21:23:01ID:???
社会科学:Data->Datas
自然科学:Datum->Data
0857nobodyさん2008/05/25(日) 00:56:50ID:???
>>855
できるかどうかという話と、
実際にやるのかという話は別問題。

たしかにAOPを使えば、そういうことが言語レベルで出来るだろう。

だが、オブジェクト指向で作られていても
実際には、トランザクションやログなど、よく使われる場所で
処理を割り込ませることができるような設計になっているから問題ない。
0858nobodyさん2008/05/25(日) 22:20:48ID:???
cakephp でサイトを一つつくります。
そのcakephpってどうする?

1.プラグインとかコンポーネントとか残したまま再利用。
2.もっかい新しくcakephpをダウンロードして、プラグインとか入れ直す。

1だと、コードがどんどんぐちゃぐちゃになりそうだし、使わないコンポーネントとかも残る可能性がある。

2だとプラグインとか入れ直すのが面倒下さい。

僕的には1ですが、みなさんいかがでしょうか。
0859nobodyさん2008/05/25(日) 22:21:40ID:???
>>858
追記

一個サイトをつくったあと、さらにもう一つの新しいサイトを作る場合。です。
0860nobodyさん2008/05/25(日) 23:45:46ID:???
好きにすりゃいいよ。
0861nobodyさん2008/05/26(月) 09:21:10ID:???
掲示板のシステムを CakePHP で作ろうと思っています。
モデルは Post(記事) と Comment(コメント) です。
そして Post 一覧表示で Post 毎の Comment の数も同時に表示したいと思います。

この時、Comment の数はどのように算出するものなのでしょうか?
自分で思いつく範囲は次の通りでした。

1. Post 1つ毎に select count() from Comment where 〜 を発行する。
2. select * from Comment で全ての Comment を取得し、アプリ側で Post 毎に数をカウントする。
3. Post テーブルに count 列を用意し Comment 登録時にインクリメントする(非正規化)。
4. 3.の動作をトリガーで実現する。

このようなケースはよくあると思うのですが、一般的にはどのような方法が使われている
ものなのでしょうか?
0862nobodyさん2008/05/26(月) 15:22:28ID:???
>>861
それってアソシエーションを知った上での質問?
0863nobodyさん2008/05/26(月) 16:03:07ID:7/wrhW70
>>862
ああ…突っ込んじゃったよ。ほっときゃいいのに。
0864nobodyさん2008/05/26(月) 16:09:39ID:???
アソシエーションは Post hasMany Comment の関係で Post を1つ取得すると
自動的に任意の Comment が取得できるという、CakePHP 独自の仕様程度
にしか理解していませんでした。

もっと理解すれば上記の話はうまく解決できるという指摘でしょうか?できるだけ
データベースの負荷はかからないように設計したいと思っています。
もう少し調べてみます。ご指摘ありがとうございます。
0865nobodyさん2008/05/26(月) 16:29:06ID:7/wrhW70
>>864
>Post を1つ取得すると 自動的に任意の Comment が取得できるという、

ヒント:
$ret = $MyPost->find($id);
echo count($ret['Comment']);
0866nobodyさん2008/05/26(月) 16:44:00ID:???
>>865
ヒント、ありがとうございます!

>>862 で「ほっときゃいい」と言われるので、何か失礼なことを書いてしまったのか
と心配になっていました。

> $ret = $MyPost->find($id);
> echo count($ret['Comment']);

はい、上記で Comment の数が取得できるのは理解できます。ただ、この方法だと
総数だけを取得するのにその他のデータまで同時に取得してしまうため、データベース
への負荷が余計にかかるのではないかと心配だったのです。

また、1つの Post だけを取得するのなら上記の方法を採用するのですが、今回は
Post の一覧なのでその数が数百以上になることも考えられ、できるだけデータベースに
負荷のかからない方法を採用したいと思っています。

非正規系になってしまいますが、posts テーブルに count 列を持てば、たった一つの
SQL で実現できるなとは思ったのですが、これが一般的な方法なのかどうか判断が
つきませんでした。

これは CakePHP のお話ではなく SQL のスレの方が適切だったのでしょうか…。
0867nobodyさん2008/05/26(月) 17:15:08ID:7/wrhW70
>>866
つ echo $Count->findCount($hogehoge)

ただし、コードが多くて読みにくくなってもよいならば。
サーバのリソース次第だろうけど、>>865にしたところで速度的に雲泥の差があるとは思えないけどね。>>865の方が投げるSQLは一つで済んでるはずだし。
実際にコード書いてテストデータ突っ込んでみて、検証してみれば?
0868nobodyさん2008/05/26(月) 17:45:04ID:???
>>867
ありがとうございます。

そして了解しました。不慣れな初心者なもので時間はかかるかもしれませんが、
考えられうる全ての方法を実際に検証してみようと思います。

確かに Comment のような小さなデータの場合、find($id) で総数をアプリ側でカウント
するのと、findCount() でデータベースにカウントさせるのではそんなに変わらないかも
しれませんね。ただ、Comment がカラム数 100 もあるようなデータの場合で、常に Post
に対して数百も付属しているような場合だと結果は変わるような気がします。そのあたり
も含めて検証してみようと思います。
0869nobodyさん2008/05/26(月) 18:37:58ID:???
要するにcakephpのmodelにカウンタキャッシュはあるのかって質問か。

あるの?
0870nobodyさん2008/05/26(月) 18:49:48ID:???
あるんじゃね?こんな書き込みあるぐらいなんだから。

https://trac.cakephp.org/ticket/4652
0871nobodyさん2008/05/26(月) 19:38:42ID:???
ありがとうございます!

RORから使われているカウンターキャッシュという一般的な用語があったのですね。
ここをみて理解できました。

http://blog.matsimitsu.nl/code/163/cakephp-countercache

behaviorを使ってカウントをインクリメントするのですね。この方法が一般的な方法で
あるとわかっただけでも安心して使えそうです。色々とありがとうございました。
0872nobodyさん2008/05/26(月) 20:20:41ID:???
要するに、cakephpのリレーションはデータ無駄にとってくるけどなんなの?って質問か。
cakephp recursiveとかでググれ。変だから。

0873nobodyさん2008/05/27(火) 01:20:24ID:Dti8RTlW
そういえば毎回、findやfinallするときに引数$recursive指定するのってメンドイよな。
クラス化してメソッドを細分化したときなんてとくに、recursiveのパターン数でメソッドを
さらに分解してしまうと大変なことになってしまう。
getPostWithComments() とかgetPostWithoutComments()とか。
0874nobodyさん2008/05/27(火) 03:10:59ID:???
なんかその設計が悪いんじゃないの・・
0875nobodyさん2008/05/27(火) 03:42:15ID:???
ビジネスロジックを律儀にmodelに入れてる悪寒
適度で良いんだよそんなの。細分化うざい。Controllerでやれ。

それでもやっぱりビジネスロジックまとめたいというなら
modelとcontrollerの間にservice層入れる。

が、そんな規模のものはcakephpは想定してないんじゃないかね。
0876nobodyさん2008/05/27(火) 13:21:52ID:???
>>875
そういう問題じゃない。

getPostWithComments() とかgetPostWithoutComments()という
メソッドが出来てしまう問題はロジックを置く場所を変えても
どっちみち出来てしまうだろ。

これはrecursiveの違いでメソッドを作るか、
引数(プロパティ設定も含む)で指定するかの違いだよ。

関数作るのが嫌なら、getPost(withiCommentsを意味する引数);とするか
$this->プロパティ = withiCommentsを意味する値; getPost();
とするしかないんじゃね?

ビジネスロジックではなく、どこまでデータを拾ってビューに渡すかの処理と
考えれば、コントローラーで取得するデータの範囲を決めるのもまずくは無い。
0877nobodyさん2008/05/27(火) 13:44:51ID:???
その通りだと思う。悪寒の憶測で話したからずれたんだな。

CakeのModel拡張して、Withで同時に拾ってくるようなマジック関数入れると
もっと綺麗かなと思った。findBy的な。

0878nobodyさん2008/05/27(火) 14:40:04ID:Dti8RTlW
先ほどの質問>>873を同僚に話したところ、ビヘイビア使えば?と言われてしまいました
0879nobodyさん2008/05/27(火) 18:20:37ID:???
behaviorって1.2から導入されたのか。
1.1しかいじってなかったのでピンとこなかったよ。
0880nobodyさん2008/05/27(火) 23:04:56ID:???
>>878
ビヘイビアですか・・・?

出来ないことは無いとは思うけど、
でもそれ、なんて名前のビヘイビアになるんだろう。

(名前がわかれば、ビヘイビアにするのが妥当か判断できる)
0881nobodyさん2008/05/30(金) 15:00:54ID:xGH68yw0
■PostgreSQLを使ったときのバグ 1.2.0.6311 beta(と最新のブランチ)で確認

$model->create();
$model->save(data)
をしたとき、以下の二つのSQL文が発行される

1 INSERT INTO "models" (〜〜) VALUES (〜〜)
2 SELECT last_value AS max FROM "models_id_seq"

問題は、2行目、データをインサートしてから、シーケンスの最大値を取得している。
これは新たに作成された $model->id を取得する為だが、
この処理が二つのセッション(AとBとする)で同時に実行された場合、

A-1 INSERT INTO "models" (〜〜) VALUES (〜〜) //シーケンスの値が1になる
B-1 INSERT INTO "models" (〜〜) VALUES (〜〜) //シーケンスの値が2になる
A-2 SELECT last_value AS max FROM "models_id_seq" //本来は1であるはずが2を取得
B-2 SELECT last_value AS max FROM "models_id_seq" //2を取得

となる場合が発生し、A-2で取得される値が正しくない。

一日に数回しか注文が無いのに、たまたま同時刻の注文とその明細が一つずれたorz
(ベータ使っている俺が悪いんで、別に恨みませんけど。自社システムだし。)

これどうすればいいのかな? 単純にcurval()を使えばいいのかな?

MySQLに関しては、SELECT LAST_INSERT_ID() AS insertIDを使っているので
問題は無いはず。その他のデータベースまでは見ていない。

えーと、それからアカウント持っている人
だれか公式に英語で伝えてください。お願いします。

あと、説明これで間違って無いと思うけど自信は無い・・・
0882nobodyさん2008/05/30(金) 15:33:24ID:???
こんなのがあった。おかしいなぁ?昔はcurrvalを使っているのに・・・?

どういうこと? なんか別の問題でもある?

https://trac.cakephp.org/ticket/381 currval()になっている。

https://trac.cakephp.org/ticket/598 このパッチでmax()になった?
0883nobodyさん2008/06/02(月) 22:09:13ID:???
1.2 stable キターーーーーーー!!!











という夢を見たw
0884nobodyさん2008/06/03(火) 15:08:24ID:s/VzyqcV
データベースからboolean型の値を取得したとき
取得できる値は、0と1である・・・という仕様なんでしょうかね?

データベースが、PostgreSQLの場合、't'が返ってきたり、
ソース見ると'TRUE'とかいう文字があったり、
ぜんぜん仕様がわからんのですが。
0885nobodyさん2008/06/03(火) 17:13:31ID:???
dreamweaver cs3 なんだけど、空の ctp ファイル作ると確実に
内部エンコーディングを sjis にしちゃうから文字化けするよね。

いつも新規作成 → 秀丸でutf-8変換 でやってんだけど。

で、現在、 あ とか 人文字だけ残したファイルをコピペしてんだけど。
なんかいい方法ない?
0886nobodyさん2008/06/03(火) 17:44:40ID:???
>>885
dreamweaverにデフォルトでUTF8と認識するってオプション無いの?

まあ、文字数が少なかったらどっちみち文字化けは
避けられないので、UTF8と認識するような文字をコメントで入れて
おくのが確実だと思うけど。
08878862008/06/03(火) 17:45:48ID:???
で、俺は何を聞こうと思ってここに来たんだっけ・・・?
0888nobodyさん2008/06/03(火) 17:54:36ID:???
>>885
俺もそれが原因でコーディングだけeclipseに乗り換えた。
ほんとは全部DWでやりたいのだけど・・・
0889nobodyさん2008/06/03(火) 18:59:53ID:???
>>886
ありがと!やっぱりそれしかなさそうだね。

>>888
仲間だ〜

で、教えてほしいんだけど、 eclipse と dw どっちが cakehp の開発効率あがりますか?
例えば、デザインは dw がいいけど、 PHPコーディングは eclips のが圧倒的にいいよ!

みたいな。

教えて頂ければ、幸いです。
0890nobodyさん2008/06/03(火) 19:07:00ID:Mx/TsVoL
>>889
そんなの人生いろいろ、人それぞれだろ。
08918842008/06/03(火) 19:11:03ID:???
PostgreSQLというか、データベースの扱いの仕様そのものがわかんね。

Boolean型を保存するときは、1やtrueなんかを適当に変換して保存。
呼び出すときは、データベースに入っているもの・・・というか
ネイティブなデータベースAPIで取得した値をそのまま返すってのが
今の動きなんだろうか?(PostgreSQLの場合、tとf)

正式版になったら、統一されるのかな?
データベースごとに戻ってくる値が違っていたりすると
ややこしいなぁ
0892nobodyさん2008/06/03(火) 19:51:40ID:???
それはSQLがリテラルじゃないから、とかじゃなくて?
0893nobodyさん2008/06/03(火) 21:14:16ID:???
>>892
ごめん、言っている意味がよくわからない。

とりあえず、findAllして戻ってきた値が、
MySQLとPostgreSQLで違うんだ。

そしてPostgreSQLの仕様では
http://itbtech.itboost.co.jp/man/postgres_man/datatype-boolean.html
> Example 3-1から見てお分かり頂けるように、
> boolean値の出力はtまたは fとなります。

PostgreSQLは頭悪いとしか思えない・・・
0894nobodyさん2008/06/03(火) 21:45:23ID:7GPFTIgo
Grails使ってる俺には実感が沸かない話だ
model内にbooleanで定義されてたらboolean入るもんじゃないのか?
http://grails.org/doc/1.0.x/ref/Domain%20Classes/findAllBy.html
0895nobodyさん2008/06/03(火) 21:46:11ID:???
>>894
くるな
0896nobodyさん2008/06/03(火) 22:05:07ID:7GPFTIgo
そもそもGrailsではテーブルがmodelに合わせて自動生成されるので型の不一致は起こり得ない
0897nobodyさん2008/06/03(火) 22:08:23ID:???
くるなっていったよね?
0898nobodyさん2008/06/04(水) 07:01:51ID:???
とりあえずGrailsの話はGroovyスレで。

Java系スクリプト言語Groovy
http://pc11.2ch.net/test/read.cgi/tech/1080052050/
0899nobodyさん2008/06/04(水) 18:11:13ID:???
コントローラでの処理に応じて、Viewを切り替える事は出来ますか?
09008992008/06/04(水) 18:17:38ID:???
>>899
ちなみにフォルダ切り替えっぽいのは発見しました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=309&forum=12
0901nobodyさん2008/06/04(水) 18:36:13ID:???
普通に$this->render()だろ?
0902nobodyさん2008/06/04(水) 18:51:36ID:???
>>901
ありがとうございます、一回も使ったことがありませんでした ><
0903nobodyさん2008/06/05(木) 10:53:07ID:???
1.2 RC出たのに静かですね。
0904nobodyさん2008/06/05(木) 11:16:40ID:???
stableではないのね
0905nobodyさん2008/06/05(木) 12:19:28ID:???
初期の1.2から相当変化したらしいけど、どれくらい変わったんだろ。
まとめサイトきぼん
0906nobodyさん2008/06/05(木) 12:22:58ID:???
セキュリティコンポーネントが扱いやすくなってるといいなぁ・・・
0907nobodyさん2008/06/05(木) 19:52:47ID:GvsgA2Ue

良い、IDE、エディタは、何ですか?
0908nobodyさん2008/06/05(木) 20:39:37ID:???
TextMateじゃないでしょうか?
0909nobodyさん2008/06/06(金) 09:50:14ID:???
IDEなんて重いから使わない。
とりあえずeclipse触っとけば?
0910nobodyさん2008/06/06(金) 09:54:17ID:???
emacs + php-mode + yahtml-mode + mmm-mode
0911nobodyさん2008/06/06(金) 15:12:33ID:ejUDGIWK
CakePHP 1.2RCを入れてみて、bakeを使ってみようと思ったんだけど、
array_intersect_key()が使えないとかいうエラーで動きません。
PHP4の環境なので確かにそんな関数は無いんですけど、PHP5にするしか無いんでしょうか?
0912nobodyさん2008/06/06(金) 15:34:17ID:???
おかしいね。見たところarray_intersect_keyは
cake/basics.phpに書いてあるようだけど。

CakePHPはPHP4でもPHP5の関数が使えるように独自で互換関数を実装している。
それがbasics.phpに書いてあるわけだけど。バグかな?


本来はCakePHPはPHP4で動くはずだと思うけど、こういうものもある。
CakePHPに限らず、PHP4でPHP5の関数を使いたいとき便利。

PHP 4.xでPHP 5.2/6.0の機能を実現する互換キット
http://phpspot.org/blog/archives/2007/08/php_4xphp_5260.html
http://upgradephp.berlios.de/


話変わるけど、1.2 RCは1.2.0.7119が出た後で1.2.0.7125がでているので注意ね。
詳細読んで無いけど。ちょっとミスっていたっぽい?
0913nobodyさん2008/06/06(金) 16:29:33ID:???
>>912
どうもです。なるほどそういう仕組みなんですね。バージョンは7125でした。

console/cake.phpからbasics.phpは呼ばれてはいるのでパスの設定とかは問題ないようです。

とりあえず、cake.phpの中にfunction array_intersect_key()をコピーしたら動きましたけど、
何なんだろ。
0914nobodyさん2008/06/06(金) 20:44:57ID:???
console\libs\cake.phpでbasics.phpを呼ぶ前に関数を使ってるっぽい。

console\cake.php
156行:追加 require_once( CORE_PATH . 'cake' . DS . 'basics.php');
226行:変更 if (!require($inc)) { -> if (!require_once($inc)) {
でとりあえずbakeが起動した。
0915nobodyさん2008/06/06(金) 23:24:32ID:???
バグ報告だなw
0916nobodyさん2008/06/07(土) 18:20:03ID:???
テーブル作るとき、通常はプリフィックス無し、
テストはtest_suite_付とかで二重にテーブル定義必要じゃん。
めんどくせー。あっcake schemaってのがあるじゃんって
cake schema使ってテーブル作ろうと思ったら、
PostgreSQLはまだちゃんと実装されてないのな・・・(´・ω・`)ショボーン

かろうじてテーブルの作成は出来るみたいだけど、
データベースからschema.phpの生成でプライマリキーの取得がおかしいわ
alter table系が動かないわ。
0917nobodyさん2008/06/09(月) 09:35:03ID:???
cakeからテーブル作成する需要ってあるの?
0918nobodyさん2008/06/09(月) 11:50:00ID:???
>>916で書いたつもりだけど?

テーブルの作成を何度もやるのって面倒なんだよね。

prefixが変わるとテーブル名も変わる。
テストではprefixが変わるから違うテーブルで再作成。
DBMSが変わるとcreate文も微妙に変わる。
0919nobodyさん2008/06/10(火) 16:59:11ID:???
名前付きパラメータ(?)の正しい書き方ってありますか?
今は

<?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category:2')); ?>

のように書いているのですが・・・
0920nobodyさん2008/06/11(水) 01:07:33ID:???
名前付きパラメータってなんだ??
0921nobodyさん2008/06/11(水) 23:19:17ID:Ox0RFxzt
>>919
<?php echo $html->link('カテゴリー2', '/posts/index/category:2') ?>

じゃ、ダメなの?
0922nobodyさん2008/06/12(木) 10:51:48ID:???
>>919
<?php echo $html->link('カテゴリー2', array('controller' => 'posts', 'action' => 'index', 'category'=>'2')); ?>

じゃ、ダメなの?
0923nobodyさん2008/06/12(木) 13:48:51ID:UzdM2zrv
おい、お前。そうお前だよ。
仕事でMySQL使って納品したのに、
MySQLのライセンス料払ってないだろ o9m
0924nobodyさん2008/06/12(木) 13:58:17ID:???
質問させてください。

特定のときだけ、
validateの特定のルールをスルーさせたい場合、
どのように指定すれば良いのでしょうか?
0925nobodyさん2008/06/12(木) 14:10:17ID:???
if ( 特定のとき ) {
  validateの特定のルールをスルー
}
0926nobodyさん2008/06/12(木) 14:36:22ID:???
>>924
ひとまずmodelのチェックはスルーさせて、コントローラでチェックすればいい
0927nobodyさん2008/06/12(木) 21:34:19ID:???
>>923
GPLを適用すれば、MySQLのライセンス料は不要。

仕事で使っても商用ライセンスは強制じゃない
0928nobodyさん2008/06/12(木) 22:22:00ID:???
>>927
ライセンスも理解できないアホは相手しなくていいよw
0929nobodyさん2008/06/13(金) 00:03:46ID:VdaxJKXn
ヒント:Community Server
0930nobodyさん2008/06/13(金) 03:03:15ID:???
気持ち悪いから調べてみた。
ttp://dev.mysql.com/doc/refman/4.1/ja/using-the-mysql-software-for-free-under-gpl.html
>MySQL データベースソフトウェアを Web サーバとともに使用する場合(提供する製品でない限り)、商用ライセンスは不要である。MySQL サーバを使用する市販の Web サーバを実行する場合も、同様である。

つまり、Webサーバにインストールして使ってるMySQLに対して、CakePHPで作ったWebアプリ動作させるなら、MySQLはGPLでいいんじゃねぇの。

ttp://www-jp.mysql.com/about/legal/licensing/foss-exception.html
で、FLOSS。MySQLは、X11ライセンスで使えるのでCakePHPも問題なく使えるんじゃないのかね。

ついでに、Webサービスの場合、バイナリを配布しているわけじゃないので、サービスを利用する人間に対して
ソースコードの公開義務は発生しないんじゃない、なんてのは各所で書かれてる期がするけど。
0931nobodyさん2008/06/13(金) 03:09:01ID:???
PHPでつくったシステムを納品するところには、PHPのソースコードを渡さないとだめだよ!
0932nobodyさん2008/06/13(金) 03:17:58ID:???
>>931
納品するところにはソースコード渡すね。
まぁ、ソースコードだし、見て改変するのは自由だけど、
その改変されたプログラムを保守/サポートするかしないかは、契約書とかで別途記載することになるんじゃねーの。
0933nobodyさん2008/06/13(金) 03:37:02ID:???
>>931
はギャグで言ってんだろw
0934nobodyさん2008/06/13(金) 06:06:54ID:???
んなもん契約次第。
0935nobodyさん2008/06/13(金) 07:18:43ID:n3lmnd89
質問なのですが、
たとえば、
PostとTagがhasAndBelongsToManyの関係にあるとして、
各々のTagが、それぞれ何回使用されているかを調べたいのですが、
どのような処理が考えられますでしょうか?

つまり、posts_tagsテーブルをtag_idでGROUP BYしてCOUNT(*)したような結果がほしいのですが・・・
(わかりづらくてすみません・・・)

よろしくお願いします。
0936nobodyさん2008/06/13(金) 11:35:00ID:AIRweHgS
>>927
GPLライセンスだったらソースコードは無償で提供しなければいけないんですが。
0937nobodyさん2008/06/13(金) 11:59:03ID:???
ポケットリファレンス、予約しちゃったけど、
1.2への対応は大丈夫なんだろうか?

だいぶ仕様かわってるけど・・・
0938nobodyさん2008/06/13(金) 13:50:59ID:???
>>936
PHPで作ったアプリ納品するときに、ソースコードを提供しろって
自分言っていることの意味わかっているか?

PHPはバイナリというものが無く、ソースコードそのものが
実行ファイル繩稚で、そもそもソースコードで
提供することしか出来ませんからw

ウェブサービスのように、バイナリ(=ソースコード)を
利用者に提供していないのなら、ウェブサービスの利用者に
ソースコードを提供する義務が無いのは常識。

それがいやってんで、GPLv3が出来たんだよ。MySQLはGPLv2な。

ちなみにGPLに”無償”で提供するという決まりは無い。
0939nobodyさん2008/06/13(金) 13:57:50ID:???
GPLを読まずに人からの伝聞だけでなんか言ってる>>936とかは一回ちゃんとGPLをチェックしなよ
0940nobodyさん2008/06/13(金) 20:06:46ID:???
使用するコンポーネントを動的に変えたいのですが、
各コントローラのbeforeFilterで

$this->components = array('hogehoge');

のようにしても、すでにコンポーネントの処理が終了しているらしく、
意味がありませんでした。

このような場合、どういう処理を書けばよいのでしょうか?
0941nobodyさん2008/06/13(金) 20:29:49ID:???
>>940
コンストラクタで設定する
09429402008/06/13(金) 21:19:57ID:???
>>941
レスありがとうございます。

それは各々のコントローラ(app_controllerでない)の__constructでいいのでしょうか?

ためしにPostControllerで

function __construct() {
parent::__construct();
$this->components = array();
}

として、
$this->componentsを見ると、ちゃんと空になっているのですが、

その後、

function beforeFilter() {
parent::beforeFilter();
pr($this);
}

とすると、
var $componentsで指定したコンポーネントのインスタンスが生成されてしまっています。

どうしてでしょうか・・・?
よろしくお願いします。
0943nobodyさん2008/06/13(金) 21:35:55ID:???
詰んだ…
MAMP (10.4)でsql5.0、php5
以下のメッセージが出ます。
index.ctpはシェルからもOSからも該当の場所に存在することを確認しています。
document routesは/Users/hoge/Sites/です。

同じようなトラブルがあったことがあれば教えてください。


Missing View
Error: The view for ItemsController::index() was not found.

Error: Confirm you have created the file: /Users/hoge/Sites/gotcha/app/views/items/index.ctp

Notice: If you want to customize this error message, create app/views/errors/missing_view.ctp
0944nobodyさん2008/06/13(金) 21:37:33ID:???
補足

Cake1.2です。
テーブルはitems(フィールドはid,contentのみ)
コントローラはItemsControllerのみ
モデルはItemのみ
チュートリアルに沿ってやっています。
0945nobodyさん2008/06/13(金) 21:49:56ID:???
大文字小文字のチェック クラス名の複数形と単数形チェック
0946nobodyさん2008/06/13(金) 21:55:03ID:???
>>945
今しがたやりました。
何なんでしょうね…
0947nobodyさん2008/06/13(金) 22:13:10ID:???
解決しました。
MacOSX君の優秀な"拡張子を表示しない"オプションのおかげで
"index.ctp.html" -> "index.ctp"と表示されていただけでした。

お騒がせしました。
0948nobodyさん2008/06/14(土) 00:19:58ID:???
Winだったら罵倒されてるところだけどねw
0949nobodyさん2008/06/14(土) 00:30:13ID:???
>>942

たしか、CakePHPはすばらしくも(おせっかい?)
AppControllerで指定したComponentsの値と
そのサブクラスで指定したComponents値を
マージしているのです。

普通はサブクラスのComponentsの値のみ
有効と考えるのが普通ですが、なんとCakePHPは
AppControllerのComponentsを取得してあわせるのです。
0950nobodyさん2008/06/14(土) 03:51:42ID:???
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1213&forum=6
>
> 試さずにレスしますが、1.2RCからは比較演算子はカラム名の方に付けるようになったんじゃないかと。
>
> $conds = array('id =' => $user_id);


えー。cake_1.2.0.6311-beta では前のままだよねぇ?
理由はなんとなくわかるが、すごい変更だw
0951nobodyさん2008/06/14(土) 13:39:47ID:???
RC1に移行してからsaveができなくって大変困ってます。
ちょっとお尋ねしますけど、
/cake/libs/model/model.phpのgetColumnTypeメソッド(881行目付近から)で、
if (strpos($column, '.')) {
list($model, $column) = explode('.', $column);
}
if ($model != $this->alias && isset($this->{$model})) {
return $this->{$model}->getColumnType($column);
}
という部分がありますが、これだと$columnに'.'がない場合、$modelはNullのままですよね?
で、$modelがNullのまま if ($model != $this->alias && isset($this->{$model})) { を通ると、
$this->Null ってことになるからエラーになりますよね?
Cannot access empty propertyて叱られます。
これって私がおかしなことをしているから、
$modelがNullになってしまうんでしょうか?
普通にやっていれば$modelはNullにならない?
もしNullがありえるならisset($this->{$model})は、
isset($model)とするべきだと思うんですが…。
どうか教えてください。エロい殿方。。
0952nobodyさん2008/06/14(土) 16:08:54ID:???
質問させてください!

データベースを使わないモデルで
$form->createを実行すると

Fatal error: Call to a member function schema() on a non-object in
〜cake\libs\view\helpers\form.php on line 127

というエラーが発生してしまうのですが、
なにか対処法はないでしょうか?
0953nobodyさん2008/06/15(日) 02:05:22ID:???
フォームからGETで送信したとき

sample?foo=1&bar=2

ではなくて、

sample/foo:1/bar:2

のようにしたいのですが、
何かよい方法はないでしょうか?
09549532008/06/15(日) 02:20:24ID:???
いまはredirectで書き換えているのですが、
できればredirect以外の方法がいいです。

よろしくお願いします。
レス数が950を超えています。1000を超えると書き込みができなくなります。