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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/06/20(金) 01:24:40ID:???
http://www.cakephp.org/

10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/

マニュアル日本語化
http://www.cakephp.jp/doc/

Cookbook :: 1.2 Collection :: マニュアル
http://book.cakephp.org/ja

日本語フォーラム
http://cakephp.jp/modules/newbb/

あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/

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

【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
06246212008/11/14(金) 16:23:40ID:???
>>622
うーん、落としてきたモノをそのまま展開してるだけなんですよね。
どっかで間違えたのか・・・

>>623
デバッグレベルは3にしてあります。
それでも真っ白なんです><
0625nobodyさん2008/11/14(金) 16:25:23ID:???
>624
PHPかApacheのログ見れ。
多分、cakeの問題ではない。
06266212008/11/14(金) 16:46:03ID:???
>>625
ありがとうございます。
でも、それらしいエラーは見あたりませんでした。。

でもなんとなくサーバーっぽい気はします。
0627nobodyさん2008/11/14(金) 17:34:28ID:???
Shift_JIS で保存してるとか?
0628nobodyさん2008/11/14(金) 17:36:59ID:???
サーバーっぽいってなんだよw
エラー無いのに何も表示されないなら何も出力しない処理に成功してるって事だろ
06296212008/11/14(金) 18:29:19ID:???
>>627
確認したんですが、それもなさそうです。。

>>628
そうですねw
いや、設定かなぁと。RewriteBaseとか。
でも別のサーバでは特に追記しなくても普通に動くので、なんだろう、と。
0630nobodyさん2008/11/14(金) 19:48:22ID:???
1.1 -> 1.2RC2 のときに同じ現象陥った。
結局訳が分からず、一念発起して、1.2で書き直したけど。
同じかなあ?
06316302008/11/14(金) 19:50:04ID:???
あ、ごめん。移行の話じゃないか。スマン
0632nobodyさん2008/11/14(金) 19:51:34ID:???
config/database.phpで文字コード明示とか、どう?
0633nobodyさん2008/11/14(金) 22:25:29ID:???
NetBeand 6.5RC2使ってみたんだが、デバッグ時のmod_rewriteって対応してないの?
Eclipse+XDebug、NetBeansでCake mod_rewite無し版だとちゃんと使えるんだが・・・
0634nobodyさん2008/11/15(土) 00:12:16ID:???
NetBeandって何?
06356212008/11/15(土) 01:03:38ID:???
>>632
うーん・・ダメっぽいです。
とりあえず今回は時間もないので1.1で作ることにします。
いろいろとありがとうございます。
0636nobodyさん2008/11/15(土) 02:07:44ID:???
そんなレベルでいいのか仕事だろ
0637nobodyさん2008/11/15(土) 02:18:29ID:???
PHPで動いてるんだから何かしらエラーは出るはずじゃないの?
例えそれがフレームワーク側のバグだとしても。
過去に経験があったのは文字コードの違いで真っ白になると言う事はあった。
コードに複数の文字コード混じったりしてない?
それ以外はページ上なりapacheログなりにエラー出てたが・・・。
0638nobodyさん2008/11/15(土) 02:19:34ID:???
最悪、フレームワークのコードにデバッグメッセージ入れて
どこで止まってるか突き止めるのは可能だね
0639nobodyさん2008/11/15(土) 08:21:24ID:???
webrootのindex.phpをコメントアウトして、適当にphpinfoとか出してみたら?
表示が出なければApacheの設定の問題
出たらコメントアウトを1行ずつ外してデバッグメッセージ出して試していく
06406212008/11/15(土) 11:24:41ID:???
諦められなくていろいろといじっていましたw
>>636-639
みなさんありがとうございます。
アドバイスしてくださったようにいろいろ試してみました。

webroot上のファイルがきちんと拾えました。
ということで、mod_rewriteの設定がおかしいようではないようです。

で、現状わかったのは、とりあえず処理としてはdispacher.phpを
読み込むところまでは来ていることがわかりました。
(bootstrap.phpの最後まで)

もうちょっと調べてみます。
ここまで来たら動かしたい。
0641nobodyさん2008/11/15(土) 18:45:37ID:???
テーブル名を複数形にしろ、っていうけど
頭文字とった略語ってあるじゃん
PHP、DB、FWなんてのもそうだけど
そういうのに複数形つけるのに抵抗感があるんだけど、普通なこと?
0642nobodyさん2008/11/15(土) 19:01:10ID:???
BBSをbbsesって書かないといけないんだよね?
bbsなら一目だけどbbsesじゃ一瞬分からないから
やりたくないんだよなあああ
0643nobodyさん2008/11/15(土) 19:03:19ID:???
ちょw
テーブル名bbsesだとモデル名bbse
テーブル名bbsだとモデル名bb
テーブル名bbssだとモデル名bbss

だめじゃんwwww
0644nobodyさん2008/11/15(土) 19:10:27ID:???
>>642
BBSをモデルにする設計が問題じゃね?
BoardとかThreadとかEntryとかにすればいいんじゃないか?
0645nobodyさん2008/11/15(土) 19:12:01ID:???
略語で最後がsで終わるものは
非略語にしないとダメっぽ
本当にこんなことしなきゃいけないのか・・・
中途半端に略語でも最後がs以外なら大丈夫なのが困る
英単語って全部非略語にしたらすっごい分かりにくくなると思うし
0646nobodyさん2008/11/15(土) 19:14:29ID:???
>>644
略語にされてる英単語に規則なんて無い
ただ長いものは略語にされてそれが広まってる
BBSの件はboardでもギリギリ分かるしそうするつもりだけど
他にもいくらでも略語はあるんだよね
CDでもDVDでも、ISBNでもISDNでもADSLでも
それらを非略語にする事に強い抵抗感があるんだがw
0647nobodyさん2008/11/15(土) 19:19:38ID:???
OSを複数形にしてossなんて書いたらオープンソースかと思っちゃうな
AS,BS,CS,DS,ES,FS,GS,HS,,,,,,,,,,,,
いくらでもsで終わる略語があるんだが
0648nobodyさん2008/11/15(土) 19:20:51ID:???
全て小文字と言う制約も手伝って最悪な事になってるなw
0649nobodyさん2008/11/15(土) 19:25:32ID:???
略語じゃなくても末尾がsで終わる単語の複数形に正しく動作しない
http://www.cpa-lab.com/tech2/inflects/

bbses,bbs,bbss全てモデル名がおかしなことになる
aases,aas,aassでも同じだから
0650nobodyさん2008/11/15(土) 20:51:02ID:???
どうでもいいがBBSのSってSystemのSだぞ
そもそも命名規約がおかしいっての
0651nobodyさん2008/11/15(土) 20:52:05ID:???
ちなみにNewsは正しく使える
どちらもNewsのまま
0652nobodyさん2008/11/15(土) 21:08:11ID:???
>>650
何が言いたいの?
0653nobodyさん2008/11/15(土) 21:13:25ID:???
全部明示的にテーブル指定すればいいじゃん
0654nobodyさん2008/11/15(土) 21:17:17ID:???
命名規約にルール追加は可能だけど
でもそれ本来は多言語対応や既存テーブルのためでしょ
新規テーブルで正しい英語の複数形つけて対応出来ないケースがあるのはおかしい
0655nobodyさん2008/11/15(土) 21:23:48ID:???
最初の質問者じゃないけど・・

よく
foreach ($posts as $post) {
echo $post['Post']['title]
......

みたいのが出てくるけど、
BBSとかNEWSの場合はどうしてる?

無理やり
foreach ($newses as $news) {
......
とするのか、それとも
foreach ($news as $entry) {
......
みたいにするのか・・・
0656nobodyさん2008/11/15(土) 21:34:41ID:???
そもそも、略語の複数形って一般的な英語にあるのか?
例が思いつかないのだが。
0657nobodyさん2008/11/15(土) 22:01:06ID:???
CDs、OSsなんかは見かける。
一般的な英語では略語は普通大文字だが、
cakephpではテーブル名は全て小文字にしなきゃいけないからさあ大変
0658nobodyさん2008/11/15(土) 22:02:35ID:???
単にテーブル名は大文字、ってすれば良かった気がするんだけどね
複数形部分のみ小文字で
CDs,OSs
PROGRAMMERs
WEBSITEs

これでよかったのに
0659nobodyさん2008/11/16(日) 00:39:32ID:???
>>652
データベースにシステムを格納するかってことだろ?
格納するのはboardの情報とboardに書かれた記事(contentsやarticleみたいな)だろ
それを管理するシステムを総称してBBSになるんじゃないのか
0660nobodyさん2008/11/16(日) 00:40:39ID:???
>>659
そんなのは問題じゃなくない?
ずれた事言ってるよね君

一般的に全ての場合において正しい設計をすれば
略語の複数形で困る事なんて無い、って言えるなら別だけどw
0661nobodyさん2008/11/16(日) 00:40:50ID:???
>>657
cd_infomations
os_informations
格納するのはCDやOS自体ではなくそれに関する情報だろ
0662nobodyさん2008/11/16(日) 00:43:43ID:???
>>661
頭悪い奴は黙ってろ
usersをuser_informationsとすべき理由なんて無い
cdやosの複数形に困るから苦し紛れでつけるに過ぎないだろ
情報機器であるサーバマシンのDBに入っているものが情報である事なんて明示する必要が無さ過ぎる
0663nobodyさん2008/11/16(日) 00:45:51ID:l+j4XBOD
実装に困らない回避例出してくれてるのに、
英語原理主義にこだわってかみついてる奴ってなんなの?
0664nobodyさん2008/11/16(日) 00:46:33ID:???
>>662
命名規約はフレームワークに合わせてねってだけのこと
嫌ならフレームワーク使うな
0665nobodyさん2008/11/16(日) 00:47:15ID:???
あくまで苦し紛れの回避策でしかないのに
それがあたかも回避策ですら無くすべての命名はこう行うべきだというニュアンスで言ってるからだろ
0666nobodyさん2008/11/16(日) 00:50:45ID:???
systemはDBに格納するものじゃないだの
全てのテーブルには末尾に_informationsをつけるべきだの(格納するのはそれ自体じゃなくて情報だもんね?wwww)
電波過ぎるだろ
0667nobodyさん2008/11/16(日) 01:00:21ID:???
ものすごい曲解ですね
0668nobodyさん2008/11/16(日) 01:07:42ID:???
_informationsとつけるのは回避策であって
>格納するのはCDやOS自体ではなくそれに関する情報だろ
この様に一般的な解釈のもと行う事じゃない

こんな苦肉の策をとらなきゃいけないのかという話なのに
さも当然の事のようにこんな事主張されてもw
0669nobodyさん2008/11/16(日) 01:11:08ID:???
それがフレームワークの制約という奴です
嫌ならCakeやRoRの使用はお控えください
0670nobodyさん2008/11/16(日) 01:14:58ID:???
実際問題開発の現場でも、フレームワークのここが自由にできないって
開発止める奴いるから仕方ないよ。
0671nobodyさん2008/11/16(日) 01:16:59ID:???
別にこの回避策は既にやってるし良いんだが
これが一般的な解釈のもとやる事だと言われたら納得できるわけないだろwww
しかも数レス引っ張って何かすごい意見を持ってるのかと聞き出したらこれじゃあなw
0672nobodyさん2008/11/16(日) 01:18:41ID:???
そうなんだ
そこまでDBの名前に拘るのって
神経質ではないの?

DBの名前の不自由さ>cakeを使うこと
って単純な話なの??
0673nobodyさん2008/11/16(日) 01:21:00ID:???
いやお前の方が曲解だろwwww
そんな気になるならせいぜい100万回でも俺の文章読み直してろ低脳
0674nobodyさん2008/11/16(日) 01:25:27ID:???
wを2個以上使った時点で議論は負けだ
0675nobodyさん2008/11/16(日) 01:28:52ID:???
これを議論と捕らえてるのがおかしい
相手は何も主張してないし、俺はそいつがどれ程頭の悪い考え方をしてるのかを親切で教えてやりたいだけだからなww
0676nobodyさん2008/11/16(日) 01:29:31ID:???
会ったら良い人なのに…(たぶん
0677nobodyさん2008/11/16(日) 01:31:37ID:???
実際あったら>>670の部下だったとか
0678nobodyさん2008/11/16(日) 03:47:10ID:???
命名の話題になっているので、聞きたいのですが、
watchlistとかguestbookのような場合、テーブル名は
やはり複数形にするのでしょうか?
ウォッチリストやゲストブックが複数あるわけではないので、
ちょっと違和感があるのですが・・・

それとも、上で話されていたように、
guestbook_entriesのようにするのが妥当でしょうか?
0679nobodyさん2008/11/16(日) 04:24:01ID:???
どっちでもいいと思うが
0680nobodyさん2008/11/16(日) 14:59:56ID:???
ポインタ(Pointer)の配列・・・
ポインタのポインタの配列・・・
ポインタのポインタの配列の配列・・・
ポインタの配列のポインタの配列・・・
0681nobodyさん2008/11/17(月) 10:02:05ID:???
>>678
guestbook_をつけるかどうかは他モデルとのかぶり具合によるけど
entriesのようにするのが、適切でしょうな

foreach ($entries as $entry) ... みたいな
0682nobodyさん2008/11/18(火) 01:37:43ID:???
ER図の作成ソフトどうしてる?
cakeの規約に揃うように設定できるものがみつからない
0683nobodyさん2008/11/18(火) 13:09:08ID:???
ちなみにforeachの右側の命名は一律で良いと思います
変数はforeach宣言したときに初期化されるし
わざわざ命名する時間は省ける

foreach ($entries as $line)

foreach ($entries as $k => $v)

0684nobodyさん2008/11/18(火) 17:07:52ID:???
まあそれでいいかもね
コード見る時はforeach見た時点で配列の順次処理なんだと分かるし
0685nobodyさん2008/11/19(水) 00:26:30ID:???
2重以上のループの時は辛い
$v2とかすればいいのかもしれんが、階層に依存した名前は付けたくないな。
0686nobodyさん2008/11/19(水) 00:41:14ID:???
関数化できそうだな
各階層用のコールバック関数の配列を引数に取って順次処理するような
内部では自分を再帰的に呼び出すようにしておけばforeach自体は一つで済む
0687nobodyさん2008/11/19(水) 01:22:24ID:???
それは気持ち悪いというか美しくないとうか。
それにforeach外のローカル変数にアクセスできなくなるし。
手間という意味では本末転倒。
0688nobodyさん2008/11/19(水) 02:21:00ID:???
foreachの中が長くなるようならちゃんと名前をつける。

コードを読むときに、foreachを含めて一塊で読むか
foreachの中だけを読むか。

短いコードならforeachも含めて一塊にして読むが
長ければ、ループする処理ってのはおいといて、
中身だけを取り出して読む。

塊の中で名前が適当でもわかるなら(つまり前者)省略してもいいが、
塊の中でいきなり$vとか出てきてもわからないだろう?(つまり後者)って
時はちゃんと名前をつける。
0689nobodyさん2008/11/19(水) 12:31:25ID:???
そういや、ちょっと前にfindの話でメソッドをまとめるのがよいって話あったけど、
クラスのプロパティに代入するメソッドを作る場合、

setPramA($data);
setPramB($data);

とプロパティごとに作るより、

set('paramname',$data);

として一カ所にまとめたほうが幸せなんすか?
0690nobodyさん2008/11/20(木) 05:51:48ID:/cM24YKo
find all で、フィールドのひとつを計算式含ませて、ASで名前をつけているのですが,
Doc.count *100 AS Doc__score
出力が
[0] => Array
(
[Doc] => Array
(
[id] => 6064
[title] => regulations
)
[0] => Array
(
[Doc__score] => 165.34334421158
)
)
のようになってしまいます。
どうにか[Doc]の配列に計算したscoreを含めるようにできないでしょうか?
cake1.2RC3, MYSQLです。
0691nobodyさん2008/11/20(木) 09:46:38ID:???
>>690
Doc.count *100 AS Doc.score
じゃなかったっけか
0692nobodyさん2008/11/21(金) 18:42:51ID:???
すみませんが、質問です。

cake bake で自動生成されるコードのインデントを、TABではなくて半角スペー
ス4つにしたいのですが、それを設定する方法があったら教えていただけないで
しょうか?
0693nobodyさん2008/11/21(金) 18:52:01ID:???
>>692
scaffoldなら
cake/libs/view/scaffolds のファイルを書き換えたら良かったはず

bake も利用しているかもよ
06946932008/11/21(金) 19:00:30ID:???
>>692
cake/libs/templates/views
こっちかも
0695nobodyさん2008/11/21(金) 20:32:03ID:???
>>633-694
ありがとうございます。自分でももっと調べてみます。
0696nobodyさん2008/11/22(土) 16:36:33ID:qo4yapkz
auth compornent使いはじめたのですが、
暗号化されたパスワードを復号化する時って、どんなして処理してます?
0697nobodyさん2008/11/22(土) 18:09:23ID:???
CakePHPのデフォルトってSHA256だろ?
だったら複合化は無理だろ
可逆暗号に変える必要があるが、セキュリティを落としてまで複合化する必要性ってなんだ?
06986962008/11/22(土) 18:25:21ID:qo4yapkz
>>697
ユーザ自身にパスワードの変更をさせたいのですが、
入力フォームのデフォルトに、復号化した値を入れたいなーと思ったんです。
0699nobodyさん2008/11/22(土) 21:10:29ID:???
すみません、細かい質問なのですが、
controller.php のソースで、
$this->{$this->modelClass}
という記述がよく見つかります。

これは何をしているのでしょう?

そもそも、$this->{何か} という記述がどのような動作になるのか、わかりま
せん。教えていただけないでしょうか?
0700nobodyさん2008/11/22(土) 21:13:10ID:???
ちょっと補足します。
$this->プロパティ名 なら、どういう動作かはもちろんわかります。
$this->{何か評価される式} というのが、どういう振る舞いをするのかわから
ないのです。

ためしにこんなことをしてみましたが、エラーになりました。
$x = "hoge";
$this->{$x}; // エラー
0701nobodyさん2008/11/22(土) 21:19:42ID:???
マニュアルくらい読んでからやろうよ
0702nobodyさん2008/11/22(土) 21:31:35ID:???
>>701
マニュアルとは、PHPマニュアルのことでしょうか?
一応見たのですが、該当箇所がわかりませんでした。
http://search.net-newbie.com/php/language.oop5.html

ちなみにさっきの件は、少し不正確でした。$this だとうまく行きますが、そ
れを代入した変数だとうまく行きません。


class Test {
 ; ;var $hoge = 1;
 ; ;function fuga() {
 ; ; ; ;$x = "hoge";
 ; ; ; ;var_dump($this->$x);
 ; ;}
}
$test = new Test();
$test->fuga(); // int(1)

var_dump($test->"hoge"); // error

$thisだけ、プロパティ名自体を変数にできるようです。
0703nobodyさん2008/11/22(土) 21:32:18ID:???
あ、余計な ; が入ってしまった…。
0704nobodyさん2008/11/22(土) 21:32:34ID:???
単なる可変変数です
0705nobodyさん2008/11/22(土) 21:38:19ID:???
>>704
可変変数って、$$x という風に、$が多重になっているものだと思うのですが…。
http://search.net-newbie.com/php/language.variables.variable.html

>>702のコードには、$$ は一つもありません。
0706nobodyさん2008/11/22(土) 21:42:30ID:???
$this->{$this->modelClass}
あるじゃん
0707nobodyさん2008/11/22(土) 21:49:23ID:???
>>706
??すみませんが、おっしゃることがわかりません。
grep "$$" で一行も返ってこないのですが、それでも可変変数なのですか?

そして、もし単なる可変変数なのなら、

class Test {
  var $hoge = 1;
  function fuga() {
    $x = "hoge";
    var_dump($this->$x); //これはOK。
  }
}
$test = new Test();
$test->fuga();
$x = "hoge"
var_dump($test->$x); // これはNG.

こうなるのはなぜなのでしょう?
0708nobodyさん2008/11/22(土) 21:52:16ID:???
{$this->modelClass}

この部分が可変なんだろ
0709nobodyさん2008/11/22(土) 22:04:46ID:???
$$が書いてあれば可変か
字面しか理解できない阿呆の典型だな
0710nobodyさん2008/11/22(土) 22:22:44ID:???
http://jp.php.net/manual/ja/language.variables.variable.php
ここのnote欄に、膨大な試行錯誤が見つかりました。
可変変数には、undocumentedな振る舞いがたくさんあるようです。
どうやらこれが答えですね。

こういうundocumentedな挙動って、いつ廃止されるかわからないものでしょう
に、フレームワークに利用するとはすごい話だと思うんですが、考えてみたら
documentedな関数の振る舞いもPHPはしょっちゅう変わるんでしたっけ。
0711nobodyさん2008/11/22(土) 22:25:32ID:???
うちらに聞かれても
0712nobodyさん2008/11/22(土) 23:27:45ID:???
>>707
書き方も間違ってるし変数のスコープが分かってない。

コンストラクタやセッター的なもので
オブジェクトから見える場所に代入してないんだから
fugaメソッドを呼ぶまで、testインスタンスの中からは$xは見えない。
0713nobodyさん2008/11/22(土) 23:46:37ID:???
初心者さんかもしれないけど、OKとNGだけでなく
何のエラーが出るのか、そのエラーは何が原因なのか、そのエラーの解決方法は何か
って辿っていくのがプログラミングのコツだよ
0714nobodyさん2008/11/23(日) 03:34:16ID:???
>>698
何も入力してなかったら変更しない
してあったらそれに変更だろJK
07156962008/11/23(日) 04:48:20ID:l1Rm9lxO
>>714
うーん、まぁそうですね。
しかしAuth compornent使うと、パスワード一覧表とか表示するのも結構大変てことなんすかね
0716nobodyさん2008/11/23(日) 05:06:33ID:???
どんだけセキュリティポリシー甘いんだよお前の会社は
0717nobodyさん2008/11/23(日) 06:16:38ID:???
paginateでcurrent_date以前の物だけ表示みたいのってどうやるのかな?

array('hogehoge' => current_date)
array('hogehoge' => '日付')

みたいな感じだと `hogehoge` = `日付` みたいにしかならないよね?
current_dateはともかく日付指定でも不等号条件は使えないのかな?
07186962008/11/23(日) 06:19:23ID:???
>>716
いえ、仕事じゃないです。ていうか、このレベルでphpの仕事出来ないかと…
でもあれですね、こういうことは普通しないってことは解りましたです。

もし、やりたいなら入力時に別のカラムに生のパスワード入れる方法を思いつきましたので、
そうすることにします。皆さんお相手くださってありがとうございました。
0719nobodyさん2008/11/23(日) 06:47:23ID:???
>>717
array('hogehoge <=' => current_date)
0720nobodyさん2008/11/23(日) 07:45:49ID:???
>>719
ズバリです
ありがとうございます

('hogehoge' => '<= current_date')

とか最初やってて悩んじゃいました
0721nobodyさん2008/11/23(日) 12:17:59ID:???
>>718
AuthComponentは、暗号化の方法を変えられるよ。
もし(セキュリティ的に問題なくて)、パスワードを可逆にしたいなら。
ttp://d.hatena.ne.jp/ngtn/20080311/1205245777
0722nobodyさん2008/11/23(日) 12:39:53ID:???
質問です。

Controller::paginate() の第一引数 $object が与えられなかった場合、
paginate()の戻り値は、controllerのデフォルトのmodelのインスタンスになる
と思うのですが、それって公式なドキュメントのどこに書いてあるのでしょうか?

APIドキュメントには、$object = null, と書いてあるだけで、実際nullだった場合の
paginate() の挙動については書かれていません。
http://api.cakephp.org/class_controller.html#6f79c1eed018894aede112c294087345
0723nobodyさん2008/11/23(日) 12:54:38ID:???
>>722
ソースはそうなってるね。
00882 } elseif (empty($object) || $object == null) {
00883 if (isset($this->{$this->modelClass})) {
00884 $object = $this->{$this->modelClass};
ドキュメントが必要?
■ このスレッドは過去ログ倉庫に格納されています