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

【PHP】フレームワーク CakePHP 9ホール目【v1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/07/23(金) 09:13:26ID:v3m09M9u
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0527nobodyさん2010/09/12(日) 00:53:23ID:???
>>522
PHPで作る携帯サイトって本を買ったんだけど、
appフォルダとapp_adminをドメインで分けて作っていっくことを前提で解説してあったんで
0528nobodyさん2010/09/12(日) 00:58:08ID:???
>>527
別の方法考えな。
appとapp_adminを分けるってことはそれぞれのフォルダにいくつか同じファイルが存在するってことだろ?
バグ生み出す原因を作るだけだぞ
0529nobodyさん2010/09/12(日) 01:00:58ID:???
>>527
ようするに別アプリケーションなわけですよ。
てかその本ヒドイ予感
05305282010/09/12(日) 01:30:51ID:???
>>527
その本持ってたわw
やり方は本に書いてあるから、よく読め

>>529
前半部分しか読んでないけど、新たな発見があって悪くはなかった。
p118の表とかCakeの流れが分かりやすく書かれてたし。
0531nobodyさん2010/09/12(日) 02:32:07ID:???
俺もその本持ってて公開用・管理用とで分けてるけど、何がいけないんだ?
同じコントローラーでも公開・管理で仕様が異なるんだから
バグの原因にならないと思うけど。

むしろ、1つのファイルに長々とコードを書いていくことが
バグや見落としの原因になるぞ。
0532nobodyさん2010/09/12(日) 02:53:28ID:???
>>531
あぁスマン>>528は本見る前に書いたレスだから忘れてくれ。

同じコードがあちこちに散在しているプロジェクトは修正忘れが起きやすくバグをうむ。
だから、>>528みたいな忠告をしたんだけど、ソース見てみたら、
共通なのはapp_model.phpとか、あまりないのな。
0533nobodyさん2010/09/12(日) 03:16:47ID:???
>>531
ついでだから、こちらも質問させてくれ。

1つの関数に長々とってなら分かるけど、
1つのファイルに長々とコードを書いていくとバグの原因になるのはなんで?
0534nobodyさん2010/09/12(日) 03:23:34ID:???
てか共通な部分はどうするの?
モデルなんて一緒じゃないの?
0535nobodyさん2010/09/12(日) 03:58:40ID:???
自分はやんない派だけど検索パスの追加かなー?
0536nobodyさん2010/09/12(日) 04:35:47ID:???
あ、そっか
views,controllersは別々で問題ない。
configあたりはほぼ同じ内容でコピペなんだろうね

でもなんだかんだで同じ処理って出てくるよなぁ
メンテナンス性は落ちそうに思うんだけどな
0537nobodyさん2010/09/12(日) 05:12:08ID:???
>>533
前者がわかるのになぜ後者がわからないの?
単にコードが長いと見落としがあるだろ。
それ以外も出来るだけコードを簡潔にするのが良いって聞いたこと無いか?

>>534
それは>>523にすればいいんじゃねぇ?
実質、configファイルのコピーだけだと思う。

俺の場合、公開用・管理用とで分けてるから、同じような処理は出にくいな。
findのconditionやsaveの条件も異なるし。ビューの表示する内容も。
0538nobodyさん2010/09/12(日) 05:14:56ID:???
ま、appを分けなくても function admin_index()とか
コントローラー内でアクション分けする方法もあるから、
自分が管理しやすい方法でやればいいと思うよ。
05395322010/09/12(日) 09:03:48ID:???
>>537
コロコロ意見変わってスマンが、やっぱり>>532は撤回。
たまたまチェックしたmodelのファイルの中身がアソシエーションとバリデーションの
設定くらいしか書いてなかったから、このくらいならいっかと思ったけど、
よくよく調べると、他にも同じようなコードが散在しているね。

メンテナンス性を考えるとモデルくらいは>>523のようにした方がいい気がする。


>単にコードが長いと見落としがあるだろ。
>それ以外も出来るだけコードを簡潔にするのが良いって聞いたこと無いか?


関数なりメソッドなりのコードを簡潔にするってのは聞いたことあるけど、
ファイルを短くた方がいいなんて聞いたことがないな。
ファイル分割したら、コードの見落としって減るか?
1つのファイルに100個ぐらい関数あったら、見落としそうってのも分かるけど、
Cakeのファイルなんて普通は多くても10個や20個じゃない?
0540nobodyさん2010/09/12(日) 13:24:32ID:???
なるへそ
0541nobodyさん2010/09/12(日) 13:44:17ID:???
>>539
あんまりスクロールが長いと可読性が下がって見落としが増える。
コメントを充実させたり、役割ごとにきちんとファイル分けした上での関数10個なら問題ないと思う。
ごった煮でファイル名が曖昧になるようなファイルは関数10個でも見辛い。
05425322010/09/12(日) 14:02:34ID:???
>あんまりスクロールが長いと可読性が下がって見落としが増える。
PDTみたいなの使ってない?
PDTだと関数一覧が表示されるから、そういう理由で可読性が下がることはないと思うぞ。
便利だし、使ってみたら?

>ごった煮でファイル名が曖昧になるようなファイルは関数10個でも見辛い。
それは論外でしょ
0543nobodyさん2010/09/12(日) 15:11:59ID:???
>>542
普通にありえるだろ。
数学ファイルなのか、ベクトル計算ファイルなのか、二次元ベクトル計算ファイルなのか、内積計算ファイルなのか。

抽象化されたファイル名になればなるほど、およそ関係ないか、他でも再利用可能な便利関数でてくる。
トレードオフな関係に論外はありえない。
0544nobodyさん2010/09/12(日) 16:11:10ID:???
>>542
君は会員専用や管理画面も同じファイルに書いてるの?
0545nobodyさん2010/09/12(日) 17:27:22ID:???
>>544
自分が書いたCakeのアプリはそうだね。
分割してもControllerやModelのコードの半分以上が共通になるような仕様だったから。

>>527のControllerみたいに共通する部分がほとんどない場合は分割すればいいと思うよ。


>>543
曖昧になるのは単にセンスがないだけだと思うのだが。

たぶん単なる例えで言ったんだろうけど、
>数学ファイルなのか、ベクトル計算ファイルなのか、二次元ベクトル計算ファイルなのか、内積計算ファイルなのか。
って、全部まとめてmathファイルでよくね?
0546nobodyさん2010/09/12(日) 17:49:39ID:???
>>545
センスで作られたコードほど読み辛いものはないし
曖昧なケースなんてコーディングしてればいくらでもでてくるだろ…

中、大規模なコーディングしないと解らないのかもしれん。
0547nobodyさん2010/09/12(日) 19:06:17ID:???
オブジェクト指向初心者の私に誰かアドバイスをくだされ。

model内の変数を処理する時に、配列を使うか、オブジェクトにしちゃうかの判断は
どうすればよいでしょうか?

オブジェクトってどこからでも取り出せて便利だから、今まで 

$thisMonth = date(m);
こんな感じでやっていたのも、

$this->thisMonth = date(m);

のように基本的に全部オブジェクトにしたらいいんじゃないか?って思っちゃったのですが、
大きな間違いでしょうか?(重くなるとか・・)
0548nobodyさん2010/09/12(日) 19:13:04ID:???
>>547
えーと、なにを言いたいのかサッパリ分からない。
05495472010/09/12(日) 19:21:33ID:???
>>548

分かりにくくて申し訳ないです。

functionをまたいで使用する値を格納する時に、
全部オブジェクトにしちゃうのはまずいのだろうか?っていう疑問です。

下記のような形の時です。

public function getDate(){

$this->thisMonth = date(m);
}

public function showDate(){

$this->getDate();
echo $this->thisMonth;
}
0550nobodyさん2010/09/12(日) 19:22:56ID:???
それただのメンバ変数
というか此処で聞くことじゃないってわからないの?
05515472010/09/12(日) 19:30:59ID:???
すいません。スレ違いでしたか。
申し訳ありませんでした。

メンバ変数というのですね、ググって勉強しなおします。
どうもありがとうございます。
0552nobodyさん2010/09/12(日) 19:54:10ID:???
ちょww
単に覚え間違いだったのかw
0553nobodyさん2010/09/12(日) 19:59:05ID:???
別に笑うところじゃないし。何がおかしい?
0554nobodyさん2010/09/12(日) 20:03:01ID:???
ちょwwwwwwwwwwwwww
0555nobodyさん2010/09/12(日) 20:08:24ID:???
呼び名なんて別にどうでもいい。
最初からソース提示してるんだからわかる。スレ違いなだけ。
それに対して「単に覚え間違い」とかずれたツッコミしてるんだけど?
0556nobodyさん2010/09/12(日) 20:08:24ID:???
>>553
メンバ変数をオブジェクトだと思っていたところ。
そしてそれをオブジェクト指向と関係があると思い、
CakePHPのスレで質問したところ。
更に、547自身が何を笑われているかわからないところ。
0557nobodyさん2010/09/12(日) 20:09:17ID:???
>呼び名なんて別にどうでもいい。
>最初からソース提示してるんだからわかる。スレ違いなだけ。

俺らはエスパーだと思ってるの?
0558nobodyさん2010/09/12(日) 20:10:04ID:???
>>550 = >>553 == >>555 == 俺
わからないお前がバカだから消えろ
0559nobodyさん2010/09/12(日) 20:13:00ID:???
>>556
オブジェクト指向と関係あるよ
0560nobodyさん2010/09/12(日) 20:13:46ID:???
CakePHPとは?
0561nobodyさん2010/09/12(日) 20:18:41ID:???
自分より知識がないだろうと思うと茶化す
実にくだらない
0562nobodyさん2010/09/12(日) 20:41:18ID:???
少し知った奴が初心者を馬鹿にする行事がまた行われたのか…
毎度ご苦労様です!
0563nobodyさん2010/09/13(月) 00:08:18ID:???
1.3.4がでたらしいな

と思ったら

2.0系もでんのか??

スピードはええな
0564nobodyさん2010/09/13(月) 00:13:59ID:???
>>563
お、いつのまに更新されてたか。

2.0はだいぶ前から出てるよ。
0565nobodyさん2010/09/13(月) 03:04:28ID:???
>>564
2.0マジか!知らなかった・・・

1.2.xから1.3.xの時は結構大変だったけど、
2.0系も別物な感じなの?

今日知ったばかりでまた情報集めてるとこなんだ

# やっと管理してるの片っぱしから1.3.3にしたのに。。。
0566nobodyさん2010/09/13(月) 14:33:45ID:???
1.1から1.2はけっこう変わったけど、1.2から1.3はそれほどでもない
オフィシャルのマイグレーションガイドも、ちょっとだけだったし
2.0はまったく見てないからわからん
0567nobodyさん2010/09/13(月) 14:41:19ID:???
>>565
ついでに言うと3.0も。
途中でプロジェクトが分離して、今は名前が変わっちまったがな。
0568nobodyさん2010/09/13(月) 14:47:44ID:???
配列地獄はいつ解消されますか?
0569nobodyさん2010/09/13(月) 14:51:55ID:???
>>568
Cake系を使い続けるかぎり無理じゃね?
Lithiumも配列地獄っぽいし。
0570nobodyさん2010/09/13(月) 16:48:46ID:???
>>566
>>567
ありがと 昨日、流れっていうのかな見たよ
プロジェクトなのか派生なのかずいぶんでてるんだね
純正というかメインのStableはCakePHP1.3.3ってことでいいのかな

>>568
配列は慣れな気がしてきたよ
0571nobodyさん2010/09/13(月) 17:56:55ID:???
オレオレフレームワークでも配列使ってたから、移行に違和感なかったな。
ただ、モデル(テーブル)を$data['User']['name']感じにする概念は無かったが。
0572nobodyさん2010/09/14(火) 17:23:02ID:sGtN+/un
controllerがUTF-8でビューはShift-JISにしています。
afterFilterを使って出力時にmb_convert_encodingで
UTF-8からSJISに文字コード変換する方法は良くあるのですが、
findでデータ取得の時にSJISにする方法ってないでしょうか?
0573nobodyさん2010/09/14(火) 17:36:34ID:???
>>572
ビューもUTF8にしてafterFilterで文字コード変換じゃダメなの?
find時に文字コード変換はafterFindでできそうな気がするけど、
DBもUTF-8で作ってるのにビューだけShiftJISにこだわる理由はあるんだろうか
0574nobodyさん2010/09/14(火) 18:12:47ID:sGtN+/un
>>573
携帯用のビューでして、ShiftJISで表示させたいんです。
0575nobodyさん2010/09/14(火) 18:15:45ID:???
>>574
まずsageようじゃないか
そして>>573にあるように、UTF-8でつくろう
方法はキミが分かってる通りだ
05765732010/09/14(火) 18:22:34ID:???
質問時はsage推奨って>>1に書いてますね。すみませんでした。

あと、UTF-8で作る方法は知っていますが、>>574で書いたとおり、
携帯用のビューはShiftJISなのでそうしたいんです。
現代の携帯端末はほとんどUTF-8に対応しているとはいえ、、
今までそれで表示していて問題がなかったので。

でも、それしか方法がないと言うなら、一旦findで配列を取得して
foreachでmb_convert_encodingしてSJISに変換し、ビューに渡す方法にします。
05775722010/09/14(火) 18:23:30ID:???
番号間違えました・・。>>576>>572です。
0578nobodyさん2010/09/14(火) 18:25:53ID:???
またひとりアドバイスに従わない強者がいたか
0579nobodyさん2010/09/14(火) 18:26:27ID:???
>>576
どうしても、ビューはShiftJISにしたいっていうなら、
mb_convert_encodingの処理はafterFind()の中に書けばいいと思うよ。
0580nobodyさん2010/09/14(火) 19:09:36ID:???
viewで変換できないん?
0581nobodyさん2010/09/14(火) 19:30:32ID:???
utf8の方が女にもてる
0582nobodyさん2010/09/14(火) 19:56:50ID:???
携帯サイトってShift_JISで作るんじゃないの?
軽くググったら、そういう解説ばかりだけど。
0583nobodyさん2010/09/14(火) 20:28:55ID:???
どんなにググってもviewだけsjisなんて解説出てきません ><
0584nobodyさん2010/09/14(火) 20:29:18ID:???
utf8で作ってもフォームから送られてくるのはshift_jisだったりするよね?<au
softbankはその逆だっけ?
05855722010/09/14(火) 20:37:37ID:???
やっと指摘されてる意味がわかりました・・。
ViewもUTF-8で作成して、出力時はafterFilterでShift-JISにし、
View内のmetaのContent-TypeをShift_JISにすれば、何も問題ないんですね。

お騒がせしました。
0586nobodyさん2010/09/14(火) 20:40:04ID:???
いや、ctpはUTF8で作って、出力をSJISにすれば良いじゃない。そっちのが、あとあと楽だと思う。
0587nobodyさん2010/09/14(火) 20:51:33ID:???
変換テーブルがアレだから実際UTF-8でやると特定の文字でハマるかも。
絵文字変換のついでに対策すればいいんだけど。
0588nobodyさん2010/09/15(水) 10:54:40ID:???
CakePHPってカスですね
初心者には敷居が高くて難しいんですよ、これ
もちっと簡単にしてほしかったですね
0589nobodyさん2010/09/15(水) 11:02:19ID:???
カスなのは初心者なんだよ。
カスから脱出するために、皆頑張っているのだ。
0590nobodyさん2010/09/15(水) 11:37:03ID:???
きっとPHP自体が初心者なんだろ
PHPが初心者だったらどのフレームワーク使ったって一緒だ
0591nobodyさん2010/09/15(水) 11:46:50ID:???
一応、C,C++,C#,Javaできますが
0592nobodyさん2010/09/15(水) 12:06:13ID:???
>>591
それだけの経験があっても理解ができないのが、ある意味すごい
無 能 だ な !
0593nobodyさん2010/09/15(水) 12:12:37ID:???
hello worldができるってだけだろ
0594nobodyさん2010/09/15(水) 12:31:33ID:???
人をおちょくるのもいい加減にしてください

if,swtich,case,break,do,while使えますよ!
0595nobodyさん2010/09/15(水) 12:32:29ID:???
IDでねーのだるいな。PHPすら理解してない奴は勘弁だ
0596nobodyさん2010/09/15(水) 12:34:15ID:???
匿名掲示板でIDの意味はないと思うが・・・
0597nobodyさん2010/09/15(水) 14:56:01ID:???
>>596
ネットワークを使い分けるとかしない一般人であれば、
少なくとも、俺とお前が別人だって示せる
0598nobodyさん2010/09/15(水) 18:59:43ID:???
routes.phpに
Router::connect('/', array('controller' => 'top', 'action' => 'index', 'home'));
とすれば、初期画面を指定できますが、
同じコントローラーで別のアクションを実行するには
http://hoge.com/top/add
のようにしなくてはいけません。これを
http://hoge.com/add
とする方法は無いのでしょうか?
0599nobodyさん2010/09/15(水) 19:42:02ID:???
Router::connect('/add', array('controller' => 'top', 'action' => 'add'));
06005982010/09/15(水) 19:54:47ID:???
希望通りできました。ありがとうございました。
0601nobodyさん2010/09/15(水) 20:10:25ID:???
'home' つけっぱだし、もっかいドキュメント読み直したほうがいいよ
0602nobodyさん2010/09/16(木) 01:00:40ID:???
携帯でアクセスすると、mobile_がついたメソッドとビューを読み込みたいです。
routes.phpの設定で以下のようにする方法を良く目にするのですが、
Router::connect(‘/m/:controller/:action’, array(‘prefix’ => ‘mobile’));
この方法ではURLを変更する事になります。

同一URLで振り分けたいのですが、
上記以外でメソッドにprefixを付ける方法はないでしょうか?
0603nobodyさん2010/09/16(木) 01:42:28ID:???
>>602
君、>>598でしょ?
質問する前に少しは自分で考えたらどうだい?
0604nobodyさん2010/09/16(木) 01:45:59ID:???
>>602
Webサーバ側でやればいい。
0605nobodyさん2010/09/16(木) 02:54:46ID:???
>>603
同じroutesの質問してますが、違います。
それに半日考えてググってソースも見てどうしようもなく質問しました。

>>604
それだとCakeを使う意味がない気がします。
0606nobodyさん2010/09/16(木) 06:55:26ID:???
>>602
最近CakePHP触ってないからうろ覚えなんだけど、
controller.phpにbeforeFilterを定義して、携帯からのアクセスか
PCからのアクセスかを判別する処理をそこに書く。
その中でコントローラを割り振るようにできるんじゃないかな?
確かコントローラ名が$thisに入ってたよね
0607nobodyさん2010/09/16(木) 07:11:12ID:???
>>605
Ktai Library 使いましょう
0608nobodyさん2010/09/16(木) 09:33:19ID:???
Model内でセッションの受け渡しをするのはまずいのでしょうか?

Controller内で
    $this -> Amazon -> setSession($this -> Session);  

と記述し、

Model内で、
public function setSession($session){
$this -> Session = $session;
}

と記述。この後、モデル内で、

$this->Session->write('page_list',$page_list); 

などとコントローラで書くような記述をしています。

しかし、firefoxでは問題ないけど、IEやChromeでセッションの受け渡しが
上手く行かない問題が出てきて、もしかして、このやり方をしているかが原因なのかなと
思いました。

普通に、モデル内で使いたいなら、$_SESSIONで書いたほうがいいのかなあと。
0609nobodyさん2010/09/16(木) 14:56:55ID:???
>>602
beforFilterあたりでIPかUAを見てprefixつけられなかったっけ
と思ったら>>606が同じようなこと書いていたな

>>603
基本的なroutesもよくわかってなかったやつが一日でprefixの質問するレベルに成長するとは思えないぞw

>>607
作者さん?
機能強化よりシンプルでわかりやすい仕様にしてくれ
0610nobodyさん2010/09/16(木) 16:04:35ID:???
>>607
MASA-Pさん、上の方で本がバカにされてましたよ
0611nobodyさん2010/09/16(木) 17:32:15ID:???
>>607
文字コードの扱いが困る時があります。
もう少し柔軟にして下さい。
0612nobodyさん2010/09/16(木) 19:56:27ID:???
>>605
すべてCakeでやる必要なんてないだろ?
0613nobodyさん2010/09/16(木) 21:04:42ID:???
かといってバーチャルホストにするほどか?
0614nobodyさん2010/09/16(木) 21:18:40ID:???
バーチャルホストとかじゃなくて、/hogeにリクエストが来たらapacheでIP見て、PCなら/hogeのまま
ケータイなら/m/hogeにrewriteすりゃいいって話じゃないの?
0615nobodyさん2010/09/16(木) 21:40:20ID:???
beforeFilter()やらで判別してmobile_アクション() 呼べばいいんじゃない?
0616nobodyさん2010/09/16(木) 22:07:43ID:???
MASA-Pさん、ドメイン分けずに本の内容通り進める方法教えてください
0617nobodyさん2010/09/16(木) 23:18:48ID:???
beforeFilterでmobile_アクション呼ぶ方法を教えて下さい!(><)
0618nobodyさん2010/09/17(金) 00:51:47ID:???
>>613
むしろ、バーチャルホストでどう実装するのか聞きたい。

>>616
本の通りに書いていれば、ドメイン分けずにすむだろ。
0619nobodyさん2010/09/17(金) 10:08:15ID:???
MASA-Pさん、電子書籍にしてください
0620nobodyさん2010/09/17(金) 12:39:29ID:???
誰が誰やら
0621nobodyさん2010/09/17(金) 19:08:58ID:???
CakePHP 携帯ライブラリと位置情報ライブラリを使った簡易GPS検索プラグイン「GeoSimple Plugin」 : エクスギア Blog
http://www.exgear.jp/blog/2010/09/geo_simple_plugin/

便利そうなんだが、ライブラリ依存しないCakePHPのプラグインがライブラリ依存してるというのも皮肉な話だな
0622nobodyさん2010/09/17(金) 19:23:15ID:???
×依存
○利用
0623nobodyさん2010/09/17(金) 21:12:29ID:???
ま、使える物は便利に使わせてもらうぜ。先人達のご厚意だ。
0624nobodyさん2010/09/20(月) 01:01:46ID:???
CakePHP1.3のAuthを使った認証システムを作っています。
エラーメッセージを出そうと、Cookbookの
http://book.cakephp.org/ja/view/1252/Displaying-Auth-Error-Messages
を見て同じようにビューにecho $session->flash();と記述したのですが、
Undefined variable: sessionのエラーが出ます。

これはどうしてでしょう?$this->set('session', $session)みたいにして
ビューに渡す必要はないですよね?
0625nobodyさん2010/09/20(月) 01:23:29ID:???
↑の自己レスです。
ログイン情報を記述しているapp_controllerにヘルパーを指定してるのですが、
そこにSessionを指定しないとエラーが出るみたいです。
0626nobodyさん2010/09/20(月) 05:35:42ID:???
>>625
自分で言っているとおり、Sessionヘルパーを使うことを
宣言する必要があると思いますよ。

class AppController extends Controller{
var $helpers = array('Session');
}

Sessionコンポーネントは宣言してなくても使えるけど、
Sessionヘルパーは宣言する必要があったはずです。
0627nobodyさん2010/09/22(水) 08:56:04ID:R9kqnTJB
チュートリアルをはじめてるのですが、テーブルを作成するという箇所で
とまってしまってます。
データベースを作成する過程がないので、どのデータベースにテーブルを
作成するのかがわかりません。
■ このスレッドは過去ログ倉庫に格納されています