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

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

■ このスレッドは過去ログ倉庫に格納されています
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/
0002nobodyさん2007/11/14(水) 03:12:01ID:???
乙。
0003nobodyさん2007/11/14(水) 03:25:56ID:???
深夜遅くに乙。
0004nobodyさん2007/11/14(水) 03:26:45ID:???
あと前スレ。

【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0005nobodyさん2007/11/14(水) 11:46:19ID:???
>>1
>>あとこのへんとか(初心者向けTIPS)
>>http://www.avatarfinancial.com/pages/cake/

ヒント:初心者は英語読めないw
0006nobodyさん2007/11/14(水) 12:26:42ID:???
つ「帰国子女の新米プログラマー」
0007nobodyさん2007/11/14(水) 16:44:29ID:???
CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/
0008nobodyさん2007/11/14(水) 21:45:34ID:Y+NYefM3
先輩方、

なぜ $this->set('hoge','hoge'); といちいちコントローラーからviewへ送るものを
指定する必要があるのか不思議に思うのですがいかがでしょうか。

$this->set(get_defined_vars()); を app_conrtoroller に直接書いておくというのが
一番手間かからず楽だと思うのですが、何かデメリットありますかね

ご指導、ご鞭撻のほど、よろしくお願いします。
0009名無しさん@Vim%Chalice2007/11/14(水) 22:22:26ID:???
>>8
$this->set()を拡張するって事?

そういう風に纏めても結局、コントローラとアクションの
組み合わせごとにビュー側へ渡す変数ってバラバラだよね。
変数を渡したくない時もあるし、条件ごとにセットしたりしなかったり。

そーゆー所ってのは往々にして関数で一括りにしようとすると大変な思いをする。
んで後からキモい拡張を繰り返す羽目になる。

つーかね、$this->set();をいっぱい書くのが嫌だっつーんなら
こういう書き方があるぞ

$this->set( array(
  'foo' => $foo,
  'bar' => $bar,
));
0010nobodyさん2007/11/15(木) 16:51:14ID:k/tuboV7
>>9

ありがとうございます。

$this->set( array(
  'foo' => $foo,
  'bar' => $bar,
));

といった書き方でやることにします。ありがとう!
0011nobodyさん2007/11/16(金) 00:07:15ID:???
>>9
人のアイディアを握りつぶすのが得意な方ですね。
0012nobodyさん2007/11/16(金) 06:01:31ID:???
デメリットがないかと書いていたから、
デメリットと、
おまけでそれへの対処の一例を書いてるだけのように見えるが...

ゆとりか?
0013名無しさん@Vim%Chalice2007/11/16(金) 08:08:28ID:???
>>11
そういう風に見える?
たしかに口は悪いけど、こういう事ってひとりじゃなかなか
気付かねーと思うんだけどな

習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
プログラミングだけ個人のアイディアが〜とか言ってたら
切磋琢磨できないよ

//まあ、苦労するのもいい勉強だけどな
0014nobodyさん2007/11/16(金) 11:05:41ID:???
ダイアログ的な汎用のページを作る方法って無いかな?

たとえば、商品入力ダイアログボックス
検索も出来て、クリックして選択。
そういうページだけど、これは汎用。

あるページの商品入力にこのダイアログを使う。
また、違うページの商品入力にもこのダイアログを使う。
ダイアログ的な用途だけど、ウインドウポップアップで
出てくるのではない普通のページ。
0015nobodyさん2007/11/16(金) 11:56:29ID:???
それはJavascriptの仕事なんだぜ
0016nobodyさん2007/11/16(金) 13:26:25ID:???
>>13
> たしかに口は悪いけど、こういう事ってひとりじゃなかなか
> 気付かねーと思うんだけどな
>
> 習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
> プログラミングだけ個人のアイディアが〜とか言ってたら
> 切磋琢磨できないよ

ヘタレのくせに自意識過剰じゃね?
0017132007/11/16(金) 15:42:29ID:???
へたれで自意識過剰なので、スキルアップのため
ぜひ>>16様の神実装を参考にさせてください><
0018nobodyさん2007/11/16(金) 17:32:00ID:???
findAllを使うと

$data[0]['Model']['column']

の形式の配列が帰ってくるんですが、これを

$data[0]['column']

の形式で取得したいんです。何か楽な方法って用意されていませんかね?
0019nobodyさん2007/11/16(金) 17:41:50ID:???
>>16
文句しか言えないモマエのほうが>>13よりずっとヘタレ
0020nobodyさん2007/11/16(金) 17:52:26ID:???
>>18
app_model.php内に以下のようなコードでも入れてあげれば?

function hoge($data)
{
  foreach($data as $i => $data2){
    foreach($data2[$this->name] as $column => $Value){
      $newData[$i][$column] = $Value;
    }
  }
  return $newData;
}

で、各々のモデルでfindAllした後に$data[0]['Model']['column']形式のデータを引数にしてhogeする
0021nobodyさん2007/11/16(金) 19:37:38ID:???
>>20さん
なるほど、ありがとうございます。
やっぱり自分で作らないといけないんですね。
お手数おかけしました。
0022nobodyさん2007/11/17(土) 02:24:41ID:???
東京では勉強会も企画されてるのか。
都会の人はうらやましいな。本当に。
0023nobodyさん2007/11/17(土) 02:59:12ID:???
じゃあ田舎でもやろうぜ!@福岡
0024nobodyさん2007/11/18(日) 00:59:28ID:???
福岡は都会だろ@佐賀
0025nobodyさん2007/11/18(日) 19:13:19ID:???
最低と比べちゃすべて上だわな。
0026nobodyさん2007/11/20(火) 01:45:08ID:???
CakePHPガイドブック、誤字脱字多すぎだろw
0027nobodyさん2007/11/20(火) 08:22:30ID:???
簡単と言われるCakePHPも俺には難しい…orz
オマイラ天才だな
0028nobodyさん2007/11/20(火) 11:57:28ID:???
>>27
まず一度自分で簡単なMVCフレームワークを作ってみると
理解が段違いに早くなるよ。
0029nobodyさん2007/11/20(火) 12:21:14ID:???
>>26
途中までしか読んでないが説明と画面のスクリーンショットが一致してないとかゴロゴロあるな
0030nobodyさん2007/11/20(火) 13:01:09ID:???
>>26
誤字脱字以前に最初からbakeの使い方を説明しているのはどうなんだろ。
Railsから来た人ならわかるのかも知れないけど、Cakeから始めたら
絶対に混乱すると思うんだが。
modelとか複雑な例を出してるし、コードが長すぎて理解できないっしょ。
0031nobodyさん2007/11/20(火) 14:37:23ID:???
それはあるな。導入編で一気に作ってから実践編で基本に立ちかえってる。
それと実践編のサンプルの仕様が良くわからない(実践的なものと思えない)
0032nobodyさん2007/11/20(火) 15:35:43ID:WpMCnsjr
質問させてください。

public_html
└app/
└cake/
└vendors/
└hoge/(任意のディレクトリ)
 
と配置した場合に、hoge/ はcakePHPの影響を受けたくない場合はどうしたらいいんでしょうか。
具体的にはxreaのlogディレクトリで、中にはphpmyadminが入ってます。

http://sample.sxxx.xrea.com/log/phpmyadmin/でアクセスすると、
cakeのエラー:you are seeing this error because controller LogController could not be found.
.htaccessの問題かとは思うんですが、そもそもディレクトリ配置の仕方に問題アリですか?
0033nobodyさん2007/11/20(火) 15:49:32ID:???
サーセン自己解決したみたいです。

参考:
ttp://purazumakoi.info/blog/archives/2007/09/cakephp.html
0034nobodyさん2007/11/20(火) 19:29:14ID:???
>>33
publicなところにコアを置くのは感心しないな。
0035nobodyさん2007/11/20(火) 20:13:05ID:???
ツリー構造をしたデータをオブジェクトとしてうまく扱う方法ってあるの?

つまり、$model->findTree('id = a1') とかやったら、
- a1
 +- b1
   +- c1
   +- c2
 +- b2

こんな感じでツリーのデータとして返してくれる感じ。

参考までにほかのO/Rマッパーの話でもいいけど。

とここでふと思ったけど、自分のモデルに対してアソシエーション設定すればうまく行くのか?
0036nobodyさん2007/11/21(水) 02:55:26ID:???
railsのscaffoldがcakeのbake?

cakeもrailsみたいにコマンド一つでファイル作ってくれればいいのに
質問に答えていくのがなんか面倒
0037nobodyさん2007/11/21(水) 08:30:39ID:Cl2dTAkZ
答えるのも面倒だし、M・V・C別々なのも面倒だよね。
0038nobodyさん2007/11/21(水) 12:29:06ID:???
wraper書きゃいいだけじゃん。
0039nobodyさん2007/11/21(水) 15:54:05ID:???
>>35
TreeBehaviorといふものがあつてだな
0040nobodyさん2007/11/22(木) 01:19:04ID:???
ユーザー登録によくある、登録するメールアドレス宛に一回メールして、そこに記載されているリンクをクリックして登録みたいな処理ってコントローラーにベタガキかな?
0041nobodyさん2007/11/22(木) 08:23:16ID:nlNH1bOE
ベタ書きの意味が分からないけど、メソッド分けて、それぞれにモデルとビューを作ればいいんじゃないの?

コンポーネントにすべきか、という意味?
0042nobodyさん2007/11/22(木) 10:30:25ID:???
メールを使ったユーザー登録をcakeに書くならどういうのが最適かな程度の意味でいったんだけど
0043nobodyさん2007/11/22(木) 12:06:19ID:AuFQqZEI
普通に書けばいいんじゃないかな。
0044nobodyさん2007/11/22(木) 18:33:00ID:???
cakeやばい、どうやばいのかはやばすぎるので言えないぐらいやばい

一回自分でサイト構築までやってみて、これ試すと相当やばい
PHP野郎にとっては麻薬以上にやばい
0045nobodyさん2007/11/22(木) 19:19:37ID:???
それっていいって意味?
0046nobodyさん2007/11/23(金) 01:56:02ID:???
Railsの方がもっといいけどね。
0047nobodyさん2007/11/23(金) 02:09:41ID:???
れいるずだとぱふぉーまんすちゅーにんぐがたいへんそうなのです
0048nobodyさん2007/11/23(金) 12:37:53ID:???
cakeの勉強会、二つも企画されてるのか。
0049nobodyさん2007/11/23(金) 13:00:29ID:???
AjaxとかJavascriptに手を出したことがない初心者なんですが、
Cakeのヘルパーからこれらの世界に入っていくのは不味いですかね?
ある程度本でも何でも読んでから出直したほうが良いのかな
0050nobodyさん2007/11/23(金) 17:34:58ID:???
>>49
そういう人用のヘルパーだと思われるよ。
普通に書きたきゃ書けばいいし、ライブラリ使いたきゃ使えばいい。
まずいも何もないと思う。
0051nobodyさん2007/11/23(金) 18:26:39ID:???
ログインしてなかったら「ここは何々のページです。ログインしてください。」みたいに、viewの表示を変えるとかってview側でif分岐するしかないのかな。
あまりviewにロジック組みたくないんだが。
0052nobodyさん2007/11/23(金) 18:38:55ID:???
普通ログインが必要なページにリクエストしてきて
ログインしてなかったら一括でログイン促すページにリダイレクトだろ
おまえwebアプリ作ったことあるのか?
0053nobodyさん2007/11/23(金) 21:16:55ID:???
>>50
そうですか、助かりました。
でも少しはAjax, Javascriptの本もかじってみようと思います。
ありがとうございました。
0054nobodyさん2007/11/23(金) 21:17:41ID:???
ログインしてなかったら「ログイン」
してたら「ログアウト」を表示したいってことじゃないの?
0055nobodyさん2007/11/24(土) 04:15:26ID:???
いやそのページが何をするページかだけ説明をいれたいから飛ばすとかは無理。さすがにWebアプリ未経験ではないわ。
ログインしてない時はグローバルナビのリンク先urlでも変えて、ログインフォームと新規登録リンクと個別説明ページに飛ばすか
できれば同じurlにしたかったが。
0056nobodyさん2007/11/24(土) 04:17:02ID:???
なんか意味わからない文章なったから放置で…
0057nobodyさん2007/11/24(土) 07:36:32ID:???
よくわかんないけど「ここは何々のページです。ログインしてください。」って
テンプレートだけ作ってコントローラから何々の部分のメッセージを設定して
renderればいいんじゃないのん
0058nobodyさん2007/11/24(土) 13:35:28ID:???
>>55

お前、Webアプリ未経験者だなw
0059nobodyさん2007/11/24(土) 14:44:27ID:+GWOZRBH
僕は

○ログインしている場合
view/layout/default.thtml に
if($_SESSION['Login']['email'] != ''){ $this->render('loginok.thtml');}
(ログイン中のエレメントを表示させる)

○ログインしていない場合
view/layout/default.thtml
if($_SESSION['Login']['email'] == ''){ $this->render('loginng.thtml');}
(ログインしてね♪ボックスを表示させる)

という処理でわけてますね。
わかりやすいし、いいと思いますよ。
0060nobodyさん2007/11/24(土) 16:57:12ID:???
どっちにしろviewでロジックは入れなきゃいけないね。
エレメントにしておいて、コントローラで切り替えるってのはいいかも。
0061nobodyさん2007/11/25(日) 03:26:25ID:???
Cake1.2系使ってみてるんだけど、Viewでエラー出すときのメソッドって変わってるよね?
<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。')みたいだったやつ。
Modelでメッセージ内容決められるようになったから。

あとエラーって一個ずつしか出ないけどまとめて表示とか出来ないの?

<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
0062nobodyさん2007/11/25(日) 08:44:45ID:???
>>61
$form->input()を使えばエラーも一緒に表示されるようになる。
エラー文はmodelでも指定できるし、今まで通りControllerでも
指定できるけど、tagErrorMsgは無くなったので、inputの第二引数に
messageとして渡してあげればOK。

一個のinputに対してエラーを全部表示するのはコアを触らないと
無理じゃないかな。よく知らん。
0063nobodyさん2007/11/25(日) 20:28:15ID:???
お答えありがとう。
一個ずつしか出ないならJavascriptの使用を強制してエラー出してあげるしかないかな
0064nobodyさん2007/11/25(日) 22:38:25ID:???
フォーム周りやヴァリデーションに関してはEthnaのほうがわかりやすいなぁ
0065nobodyさん2007/11/26(月) 00:36:21ID:???
べ、勉強会、ど、どうだったの!?アッー
0066nobodyさん2007/11/26(月) 21:19:27ID:???
ケーキももう腐りかけなんかなぁ
0067nobodyさん2007/11/26(月) 21:32:38ID:g6VI9o/i
今勉強中だからそれは勘弁して欲しい。
0068nobodyさん2007/11/26(月) 22:20:15ID:???
Railsにようこそ
0069nobodyさん2007/11/26(月) 22:37:57ID:9laXyXH+
それは断る。
0070nobodyさん2007/11/27(火) 00:22:24ID:???
このスレは、ホモが集まってんの?
0071nobodyさん2007/11/27(火) 04:42:44ID:???
たしかに楽なんだけど
細かい部分で変な仕様っていうか不具合っていうか
いまいちな動作するよねえ

validationとかsaveとか

おかげでソースとにらめっこで時間かかる…
0072nobodyさん2007/11/27(火) 07:25:54ID:q198YkJr
もちろんフィードバックはしてるんだよな?
0073nobodyさん2007/11/27(火) 09:33:56ID:???
validationは2系ならよいんじゃ?
saveはidも更新されちゃうとかか?
0074nobodyさん2007/11/27(火) 11:12:10ID:O5dAXXRh
テーブル設計のとき、外部キーは「テーブル名_id」と命名しますよね。
テーブル名が「prefix_テーブル名」の時は「prefix_テーブル名_id」となるんでしょうか?

また、テーブル名は複数形ですか?
0075nobodyさん2007/11/27(火) 21:07:05ID:???
環境をまず言うべきだ
0076nobodyさん2007/11/27(火) 21:16:36ID:???
>>72

そこまでまだ使いこんでない

>>73

2は少しよさそうだね

なんかわかりにくいというか 仕様が曖昧だよね
まあ楽につくろうっていうのが趣旨だからしかたないのかもしれない

もうちょっといじってみる
0077nobodyさん2007/11/27(火) 22:46:38ID:???
>>74
日本人じゃないから仕方が無いけど、
単数と複数の意味を考えよう。

テーブルとは、レコードの集まりだ。
で、一つのレコードは、一つのもの。つまり単数だ。
だからレコードのID・・・つまり一つのもののIDなのだから
単数形_IDになる。

そしてその集まりであるテーブルは当然複数形となる。

ついでにいうと、テーブルのレコードに相当するModelは当然単数形だし、
そのモデル(単数)の一覧(複数)を表示したりするコントローラは複数形となる。

単数形と複数形の使い分けはこんな感じ、

あと残りの単語の区切りがアンダーバー区切りか頭大文字かはクラス名は頭大文字
ファイルやテーブルはアンダーバー区切りとなる。
0078nobodyさん2007/11/28(水) 00:30:00ID:???
テーブル A hasMany B
テーブル B hasAndBelongsToMany A

のときの A のデータの編集(新規追加)画面を作ってる

Aの編集画面で、Bのデータを持ってきて表示・選択できるところまでできた

で、Aのデータをsaveするときに、Bのデータのsaveとかvalidatesは自動でやってくれるの?

この辺り、いまいちややこしいなああ
0079nobodyさん2007/11/28(水) 01:03:43ID:???
>>78

続きだけど
この場合、自前でvalidatesするときはどこでするの?

AとBを関連づけるための A_Bテーブルも作ってるけど A_Bモデルでやるのかな?
それともAモデル?
Bモデルだとデータの形式が違うから AモデルかA_Bモデルだとは思うんだが…
0080nobodyさん2007/11/28(水) 03:05:53ID:k8OzrBLt
1.1で特定のコントローラーだけtagErrorMsgでエラーメッセージがでなくなったんですが、同じ現象にあたったひといませんか?
コントローラ内で
pr($this->User->invalidFields());
とかってやるとちゃんとvalidateは行われているようなんですが・・・
0081nobodyさん2007/11/28(水) 14:51:33ID:Zvh5a2IN
cakephp 動作がすげー重いような気がするんだけど・・・
どうなんすか。先輩方。
0082nobodyさん2007/11/28(水) 15:01:13ID:???
何と比べて?

ただの一枚のphpファイルだけで完結するものと
データベースにアクセスするものを比べたら
そりゃ重いのは当然だと思うが?
0083nobodyさん2007/11/28(水) 15:18:31ID:???
CodeIgniterなどお召し上がり下さい、ふくよかなお方
0084nobodyさん2007/11/28(水) 20:51:41ID:???
CakePHP使ってる人たちは、他のPHPフレームワークをどう見てる?
0085nobodyさん2007/11/28(水) 21:56:36ID:???
railsは神
0086nobodyさん2007/11/29(木) 17:42:41ID:IwtVKe0+
>>82
フレームワークcakephpを使ったプログラムと
普通にベタ書きでプログラムを書くのと比べて。
0087nobodyさん2007/11/29(木) 18:11:52ID:???
馬鹿すぎてわらた
0088nobodyさん2007/11/29(木) 21:15:28ID:???
さすがにネタでしょう。
0089nobodyさん2007/11/30(金) 18:57:34ID:uOWFJHM3
エラー文忘れましたけど、
fatal で 30秒どうのこうの・・・というエラーが出るんですよ。

更新キーを押してもなかなか表示しなかったり。
キャッシュ使わないときついんですかね。cakephp。

プログラムのみならある程度いけるんですが、画像使うともう厳しいくらい重いですね。

なんか良い方法ないでしょうか。
0090nobodyさん2007/11/30(金) 20:08:26ID:???
共有サーバやめたらいいんじゃないかな
0091nobodyさん2007/11/30(金) 21:45:10ID:uOWFJHM3
>>90

ありがとうございます。

今でました。

Fatal error: Maximum execution time of 30 seconds exceeded in /home/hoge/www/hoge/cake/libs/session.php on line 154

セッション周りがおかしいんですかね〜。
ちなみにcakephp1.1 サクラサーバーのプロっていうレンタルサーバーですね。

レンタルサーバーでも他のプログラムならさくさく動くんですが・・・。
0092nobodyさん2007/11/30(金) 21:53:08ID:???
そのエラーを出せと言われたら、俺は速攻で無限ループを書くだろうな。
0093nobodyさん2007/12/03(月) 19:35:14ID:???
オマイラ一つのMVCセットを書くときにどんな順番や頭のロジックで書いてる?
0094nobodyさん2007/12/04(火) 19:21:59ID:???
複合で
0095nobodyさん2007/12/04(火) 19:35:56ID:5jWwGUYJ
M C V の順番かな。
0096nobodyさん2007/12/04(火) 19:52:21ID:???
頭の中ではVMCの順で考えて、書くのはMCVかな。

話が変わってしまって申し訳ないけど、
1.2のcake/libs/session.phpの470行目
$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?

1.1だと
$config = CONFIGS . CAKE_SESSION_SAVE . '.php';
ってなってるし。

ticket出したいけど英語ができない・・・orz
0097nobodyさん2007/12/04(火) 20:01:17ID:???
1.2のcake/libs/session.phpの470行目 
$config = CONFIGS . Configure::read('Session.cookie') . '.php'; 
ってなってるけど 
$config = CONFIGS . Configure::read('Session.save') . '.php'; 
の間違いじゃね? 

をそんまま訳せばいいだろw
0098nobodyさん2007/12/04(火) 21:09:42ID:???
機能の豊富さで1.2系つかいはじめたが、もしかしてまだ実用的には早かったかな?
全然話違うけど、フォームの確認画面はググってすぐ見つかる方法くらいしかないんだろうか。そもそもcake使っているものに確認画面が見当たらない
0099nobodyさん2007/12/04(火) 22:56:12ID:???
おい。おまいら。ここクリックしてみろ!
運がよければいいことがあるぜ!
http://localhost/users/deletel/1
0100nobodyさん2007/12/05(水) 01:13:52ID:???
deletelにしてる奴いるのか?
0101nobodyさん2007/12/05(水) 13:38:48ID:???
せめてtinyurlとか使うだろ常考…
心優しい奴だな
■ このスレッドは過去ログ倉庫に格納されています