トップページphp
985コメント290KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/12/19(金) 15:52:19ID:ylogT+7c
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
cookbook(マニュアル)
http://book.cakephp.org/ja
the Bakery
http://bakery.cakephp.org/

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


■過去スレ
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【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/
0176nobodyさん2009/01/04(日) 12:47:21ID:???
>>175
ヒントありがとうございます。
正解みたいですね。CSSは耳にした事はありますが、難しいので避けてました。
CSS レイアウト スタイルシートがキーワードのようですね。
http://www.bnote.net/php/cakephp/cakephp08.shtml
http://www.ideaxidea.com/archives/2007/06/cakephp_014.html
勉強してチャレンジしてみます。
0177nobodyさん2009/01/04(日) 14:23:59ID:???
('A`)
0178nobodyさん2009/01/04(日) 17:01:24ID:???
テーブルレイアウトが主流だけど、数年後にはcssは必須になってる。
今から先取りして覚えておいて損はない。
0179nobodyさん2009/01/04(日) 17:31:20ID:???
現時点でテーブルレイアウトにしようなんて奴は逆に勇者に見えるわ
0180nobodyさん2009/01/04(日) 18:16:16ID:???
グーグルはテーブルレイアウトだよ
0181nobodyさん2009/01/04(日) 18:47:13ID:u5+bOtGZ
費用対効果
テーブル使った方がはるかに効率的な場合に狙ってやるのは○
テーブルレイアウトしかできないのは論外

0182nobodyさん2009/01/04(日) 18:48:37ID:???
デザイン直ってないな
崩れまくり
0183nobodyさん2009/01/04(日) 19:10:12ID:???
>>180
グーグル自体がクロールされる必要はなかろう。。
0184nobodyさん2009/01/05(月) 02:25:07ID:???
なぜCakePHPみたいな将来性なさそうな技術に時間使ってるの?
0185nobodyさん2009/01/05(月) 02:48:35ID:???
>>184
お前さんもここで使ってるよねw
0186nobodyさん2009/01/05(月) 02:48:56ID:???
じゃあCake以外でいいの教えてくれよ。PHPで。
0187nobodyさん2009/01/05(月) 03:19:39ID:???
オープンソースあぷりの多くがPHP製
0188nobodyさん2009/01/05(月) 16:02:01ID:???
>>187
それはちょっと前にPerl開発者が言ってた台詞だよ・・・
0189nobodyさん2009/01/05(月) 20:31:10ID:qd8O6pD6
仕事で仕方なくcake使ってるが次使うことはないだろう・・・
0190nobodyさん2009/01/05(月) 21:29:11ID:???
>>189
ちなみに次は何を検討してる?
0191nobodyさん2009/01/05(月) 23:41:50ID:???
もち、ちぃたん
0192nobodyさん2009/01/06(火) 09:15:09ID:???
http://pc11.2ch.net/test/read.cgi/php/1229960175/
0193nobodyさん2009/01/06(火) 09:26:24ID:???
http://book.cakephp.org/ja/view/29/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AE%E6%BA%96%E5%82%99

まだ壊れてるぞー
0194nobodyさん2009/01/06(火) 09:36:40ID:UaXiuRrZ
http://book.cakephp.org/ja/complete/39/%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A

この辺りも
1ページ表示で崩れる
0195nobodyさん2009/01/06(火) 15:31:13ID:???
>>193-194
この問題ってcakephpの問題じゃなくて
デザイン(css)の問題でおk?
0196nobodyさん2009/01/06(火) 15:48:45ID:???
フレームワークの恩恵を受けるのは
マスターしてから1年後だと思う。1年経つとCakePHPに特化した使いまわし出来るロジックがかなり増える
なので新しいフレームワークが出て、すぐ移行するのは
今まで蓄積したロジックを捨てるに等しいので
CakePHPを8割、新しいフレームワーク2割という感じでフレームワークを使っていこうと思っている
0197nobodyさん2009/01/06(火) 15:52:53ID:???
成長性を考えると、全体案件の2,3割は新しいフレームワークへ力を入れた方がいい
このバランスが大切だと思う、完全シフトはただのバカと思うし
CakePHP100%たより過ぎも、将来がない
0198nobodyさん2009/01/06(火) 15:55:30ID:???
新しいフレームワークを覚えるにしても
CakePHPを超えるものは見当たらないから
実質、CakePHP100%でやってる
0199nobodyさん2009/01/06(火) 16:08:25ID:???
コンセプトさえ理解してれば新しいフレームワークの導入なんて
せいぜい三日程度のコストしかかからないと思うんだが
独自コンポーネントを移すにしても
0200nobodyさん2009/01/06(火) 16:30:45ID:???
1.2.0.7962 Finalきた
0201nobodyさん2009/01/06(火) 17:03:32ID:???
細かいところでハマりまくる日々…
出来る人との違いを痛感します
0202nobodyさん2009/01/06(火) 17:51:38ID:???
>>200
あけおめ
0203nobodyさん2009/01/06(火) 17:54:47ID:???
>>196
言うよねぇ〜

俺も2年くらい使ってるけど、ほんっと使い回しが効く。
素晴らしいです。
0204nobodyさん2009/01/07(水) 00:15:09ID:???
>>200
メリクリ
0205nobodyさん2009/01/07(水) 02:09:30ID:???
CakePHP 1.2 SP1はまだですか?
0206nobodyさん2009/01/07(水) 10:48:13ID:???
ModelBakerが話題にあがってこないけど、誰も使ってないのかな?
ttp://www.widgetpress.com

Macユーザー自体少ないのかな。

自分はこれからさわってみます。
0207nobodyさん2009/01/07(水) 16:24:24ID:???
>>206
なんか凄そう。と思って落としてみたけど10.5専用なのね・・・残念。
0208nobodyさん2009/01/07(水) 16:47:56ID:???
http://book.cakephp.org/ja/view/84/%E9%96%A2%E9%80%A3%E3%83%A2%E3%83%87%E3%83%AB-hasOne-hasMany-belongsTo-%E3%81%AE%E3%83%87%E3%83%BC
これってトランザクション使わないとまずい?
0209nobodyさん2009/01/07(水) 16:55:48ID:???
>>208
詳しいことは他の人に譲るが
記憶が定かなら、確か件数取得(select)して、書き込む(update)だけだったと思うから、トランザクション関係ないはず。
02102092009/01/07(水) 17:00:24ID:???
>>208
あれ?複数Modelのsaveについて言っているのかな?
0211nobodyさん2009/01/07(水) 17:04:53ID:???
>>210
関連モデルのsaveについて言ってる
公式マニュアルのくせに何の注意書きも無いから内部でうまくやってるのかなと
0212nobodyさん2009/01/08(木) 09:16:02ID:???
実験してみてくれ
0213nobodyさん2009/01/08(木) 11:52:33ID:???
Cake1.2です
viewで
echo $form->error('Modelname.fieldname', '出力されるエラー表示');
だとうまくいくのに
echo $form->error('Modelname.fieldname');
でmodelの$validateで代入した'message'が表示されません。
これでうまくいくようなことがあちこちに書いてあるのに。
どうやったら'message'を出力できるんでしょうか。
0214nobodyさん2009/01/08(木) 14:16:03ID:???
解決しました。
modelの文字コードが原因でした。
0215nobodyさん2009/01/09(金) 08:36:44ID:I5IAXkbt
初歩的な質問かもしれないんですが
モデルクラスのプロパティは、コントローラーをまたがって保持されます?

なにがやりたいかというと、
モデル内でファイルを読み込んで、そのデータをプロパティに保持
(DBを使わないモデル)
他のコントローラーからそのモデルクラスのプロパティを参照したい

personモデル
 var $sex;
function loadfile() { ファイルを読み込んでプロパティをセット }
function getSex() { 性別を返す }

peopleコントローラー
getSex()でデータ取得

profileコントローラー
 getSex()でデータ取得

各コントローラーで、必ず毎回ファイルを読み込まないとだめでしょか?
0216nobodyさん2009/01/09(金) 08:42:51ID:???
静的メンバで以下みたいにやれば出来るんじゃね
if(isSet(ClassName::sex)){
//ファイル読み込み
}

一応いっとくとプロセスまたがっては無理だよ
0217nobodyさん2009/01/09(金) 08:43:21ID:???
あ、if(!isSet())ね
0218nobodyさん2009/01/09(金) 08:51:49ID:???
なるほど…ありがとうございます
できなくはないんですね

基本的には、CakePHPの流儀(というかPHPフレームワーク?)としては、
コントローラーごとに毎回データを読む(DB使う場合も)
という感じでしょうか

あとはキャッシュ機能を使うみたいな
0219nobodyさん2009/01/09(金) 08:54:52ID:???
コントローラー呼び出しごとにアクセスがあると、
ちょっと心配なんですが、キャッシュ機能使えってことでしょうか

セッションに保存するのはなんか違う気がしますし
0220nobodyさん2009/01/09(金) 09:02:28ID:???
セッションに保持すればよいということではないの?
というか、そもそも、people と profile が関連づけられていれば、profileコントローラーは不要だと思うが
(よく読み込まずに答えたから、見当違いだったらすまん)
0221nobodyさん2009/01/09(金) 09:02:36ID:???
DBアクセスオブジェクトは一つしか作られないよ
0222nobodyさん2009/01/09(金) 09:03:29ID:???
目的がパフォーマンスならセッションに入れる意味はあまり無いんじゃないの?
DBから読むかファイルシステムから読むかの違いでしょ
0223nobodyさん2009/01/09(金) 09:05:38ID:???
どういうDBアクセスが発生してるか気になるならデバッグモードにすればいい
0224nobodyさん2009/01/09(金) 10:12:30ID:???
>>215は、Model とController の対応が間違っているということはないの?
Userモデル(Personモデル)
Usersコントローラー
があって、

/users/index で、Usersリストを表示する
/users/view で、Userプロフィールを表示する
みたいな

質問を読むと、根本的な問題のような気がする
(Peopleモデルというのがイメージできないし、Personsコントローラーがあれば、Profilesコントローラーは要らなそうな気がする)
02252152009/01/09(金) 11:09:25ID:???
すんません
例は適当です…

具体的には、ファイルからデータを読み込ませ、
そのデータを元に、各コントローラーでフォームを自動構築しようとしています
(入力内容が毎回可変なため、このようにしています)

ファイルには各コントローラーにまたがる入力項目のデータが含まれていて、
各コントローラーでは、そのデータを読み込んでフォームを構築します

この場合、コントローラーごとにファイルに何回もアクセスする
ということでいいんでしょうか?
(今のところ、データベースは一切使いません。)
02262152009/01/09(金) 11:16:27ID:???
ファイル(product)
 商品名:text
 価格1:select
 価格2:select
 (価格の数は可変)

ファイル(price)
 1000
 2000
 3000
 (可変)

モデル
product
 price

コントローラー
 productController
priceController

ビュー
 product(商品の選択画面)
  ファイルを読み込んで商品名を選択する画面
 price(価格の入力画面)
  価格のデータ数分だけフォームを入力

コントローラーを分けているのは、もう少し複雑で、他のデータなども混じるためです
うまく説明できない・・・・
02272152009/01/09(金) 11:23:38ID:???
実際にはpriceにも、価格専用のフォーム生成のためのデータが入ってます(これも可変)

productにまとめると肥大化&実際に価格データ専用のアクションも必要になるため、
コントローラーをわけてます。

うまく説明できないのですが、
とりあえず、コントローラーまたぐならファイルに毎回アクセスしろってことですかね
0228nobodyさん2009/01/09(金) 11:37:58ID:???
コンポーネント使えよ
0229nobodyさん2009/01/09(金) 11:38:29ID:???
いやむしろエレメント使えよ
02302152009/01/09(金) 11:54:38ID:???
>>228

コントローラーは共通じゃないです
モデルは一部共通ですね
となるとビヘイビア?

どのみち、普通にやるとなれば毎回ファイルアクセスは発生ですね
後で外部クラス化を考えることにします…
0231nobodyさん2009/01/09(金) 12:05:39ID:???
なんでビヘイビアになるんだ?
コンポーネントかエレメントで出来るだろ
0232nobodyさん2009/01/09(金) 12:12:39ID:???
>>225 から想像するに、通常DBに保存するデータを、DBの代わりにファイルに保存しているということかな?

そうだとすると
「コントローラーごとにファイルにアクセスで良いか」というのは、Yesということになるね
(ただし、正確には、ControllerではなくModelだけど)

ProductとPriceがHasManyの関係にあるのなら、なるべくDBを使うべきでしょう。
(もしかしたらHABTMかもね)
0233nobodyさん2009/01/09(金) 12:15:46ID:???
いやいやそれ以前に
フォーム生成処理を共通化したいのならエレメントかコンポーネントだろ
0234nobodyさん2009/01/09(金) 12:19:41ID:???
で、パフォーマンスを気にするのであれば、ビューキャッシュか、CacheEngine使うということで良いと思うが。
0235nobodyさん2009/01/09(金) 12:20:22ID:???
あ、>>234は、>>232のつづきね
0236nobodyさん2009/01/09(金) 12:28:58ID:???
>>233
たぶん、>>215が気にしているのは、「毎回DBやファイルを読み込むのが気持ち悪い」ということかなと。
だとすると、viewの問題ということなんだけど、そもそもModelやControllerの設計がまずいとキャッシュも使えないからね。
0237nobodyさん2009/01/09(金) 12:34:01ID:???
PHPで常駐プロセスにデータを預けておくと言う事は出来ない。
DBに記録する以外は。

Cakeのキャッシュなんて所詮はファイルシステムから読み出してるに過ぎないから
それ以上の高速化は無理。

そもそもやろうとしてる事がエレメントを使って書くべきものに思えるが。
02382152009/01/09(金) 12:41:11ID:???
>>232

はい、だいたいそんな感じです

いずれ、ユーザー固有のデータはDBに入れるつもりですが、
今回の質問のデータはシステム全体で共通のデータです
ただ、それがユーザーの入力によって変わる(切り替える)ことがあると。


>>233

その共通化の元となるデータをファイルで読み込むんです…
ユーザーの入力に応じて変化します。
そういう可変データがたくさんあるんで…


ざっとマニュアルを見た感じでは、DataSource?を自分で作ればよいのかな、とも。
とりあえずは、モデルで処理して、後々外部クラスとかにまとめてみることにします

ありがとうございました
0239nobodyさん2009/01/09(金) 12:43:19ID:???
速い<遅い
ビューキャッシュ<<<<エレメントキャッシュ<何もしない

ビュー自体をキャッシュできるならするべきでしょう
0240nobodyさん2009/01/09(金) 12:44:03ID:???
>>238
ユーザの入力はGETなりPOSTなりで来るんでしょ?
エレメント内でそれを見て動作切り替えたらいけないの?
02412152009/01/09(金) 12:45:58ID:???
>>237

フォームの個数もパターンも無数にあるんですが、エレメントでできるんでしょうか?
いや、実際の出力はエレメントでやるんですが、
"どのエレメントをどの順番で何個出力するか"のデータが、今回のファイルに保存されているんで…

そのデータはモデルで読むか、外部クラス化するかですよね。
で、そのデータをコントローラー間で使い回したかったんです。

イメージとしては、XMLからのフォームの自動生成、
しかも、それがユーザーの入力に応じて変わると、いう感じで、
その元となるXMLを保持しておけるのかな、と。
(データファイルはいずれXML化するつもりです)

外部クラス化とかするしかないですよね。
モデルに書くと毎回読みにいくしかなさそうということで。
02422512009/01/09(金) 12:48:25ID:???
>>240

POSTで来るんですが、入力段階(画面)が数回あって、
ユーザーの入力値と順序によって、生成するフォームのパターンが変わるんです…
0243nobodyさん2009/01/09(金) 12:49:04ID:???
フォームパターンそのものをユーザにアップロードさせたりするのか?
そうでないならエレメントにコードを置かずファイルから読み込もうとしてる理由が分からん。
02442512009/01/09(金) 12:50:10ID:???
すいません、途中で送信してしまった…

しかも、画面は自由に行き来可能で、ある画面で入力値を変えると、
他の画面のフォームも再構築する必要があると…

とりあえず、一回全部組んでから効率化は考えることにします…
0245nobodyさん2009/01/09(金) 13:49:09ID:???
formヘルパーってDBなしだと使えない?(汗
0246nobodyさん2009/01/09(金) 14:01:28ID:I5IAXkbt
http://book.cakephp.org/ja/complete/182/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E4%BD%9C%E6%88%90-183

create()のパラメータ modelって、モデル名じゃなくてコントローラー名だよね?
model名入れててエラーになった orz
0247nobodyさん2009/01/09(金) 15:22:27ID:I5IAXkbt
質問だけどセッションってモデルじゃないの?
コントローラでいじるのに違和感があるんだけど
モデルじゃセッション使えないよね?
0248nobodyさん2009/01/09(金) 15:23:23ID:???
ああSession自体がモデルなんか
すまそ
02492512009/01/09(金) 18:31:13ID:I5IAXkbt
ちょっと、追加で質問なのですが…

例えば、商品のデータを編集する処理を作る場合、
商品名を編集する画面と価格を編集する画面を分けたいと思ってます

この場合、コントローラーもわけたほうがいいんでしょうか?
(もちろんモデルは一つ(Product)になるかと思いますが)

というのも、コントローラーを一つにすると、

products/name/change
products/prices/delete
products/prices/change
products/prices/delete

のようになり、URLのアクション部分が実際の処理とは違う形になってしまい、
アクション側でもパラメータでいちいち処理を分岐させる必要があります

そこでコントローラーだけを二つにわけて、

products/change
products/delete
prices/change
prices/delete

のようにしようかと思うんですが、よくないですかね?

どうでもいい質問かと思うんですが、できればCakeの流儀に合わせたいので…
0250nobodyさん2009/01/09(金) 18:39:40ID:???
>>249
change_priceと言う形にするか
change/priceじゃないの

例えばその商品名と価格の編集フォームがほとんど同じなら
change/priceの形にした方が良いよね
0251nobodyさん2009/01/09(金) 19:07:30ID:???
>>249
action名は add / edit / delete にしましょう
で、>>250のように /products/edit/price とするか

自分だったら /products/edit にして、渡されたデータ($this->data)を見て、内部で分岐するかな
(分岐の必要があれば、だけど)
0252nobodyさん2009/01/09(金) 19:10:02ID:???
いずれにせよ、何かをbakeして、基本形を身につけたほうがよさそうだけどね
02532152009/01/09(金) 19:33:24ID:???
名前間違えてましたw

>>250
>>251

あー、やっぱりコントローラーは一つにまとめたほうがいいですか
対象は同じですもんね
changeにするなら、ルーティングで変えたほうがよかったですね

型どおりのはいくつか作ってみたんですが、
まだ応用までいきついてません

参考になりました
ありがとうございます
0254nobodyさん2009/01/09(金) 23:29:16ID:???
俺ならedit_name edit_priceとアクションメソッドを分ける
0255nobodyさん2009/01/10(土) 16:34:04ID:tnQWYP/T
Securityコンポーネントの使用時に、
routes.phpでルーティングを変えるとエラーになるんですが、バグですか?

/item



'action' => 'cahnnel', 'action' => 'index'

とかに割り振ると、コントローラー?を誤認するのか404エラーになっちゃいます
0256nobodyさん2009/01/10(土) 16:34:56ID:???
cahnnel は channel の間違い…

Securityコンポーネント使うと、うまくルーティングできないよ…
0257nobodyさん2009/01/10(土) 17:31:03ID:???
>>255
俺もそれ引っかかったなあ。ベタにアクションのURLを書いちゃったけど。
0258nobodyさん2009/01/10(土) 17:36:37ID:???
>>257

やっぱりですか…

できればルーティングしてるURLに合わせたいんだけど、
どうすればいいのかさっぱり orz
0259nobodyさん2009/01/10(土) 17:39:10ID:???
>>258
つチケット
0260nobodyさん2009/01/10(土) 17:48:22ID:???
これできないと、ちと困るんだけど、、、

自前で書くしかないのか
意味ねー
0261nobodyさん2009/01/10(土) 17:59:27ID:???
コントローラー見に行かないようにしたらいいんじゃね
0262nobodyさん2009/01/10(土) 18:00:17ID:???
まあいずれにせよSecurityコンポーネントはちょっと実用に耐えない
節々にバグがあって、
他の機能と競合してどっちか使えないとか多い
0263nobodyさん2009/01/10(土) 18:07:23ID:???
$form->input('name',array('type'=>'submit'));

これでなぜかTEXTAREAになるのは俺だけ?
0264nobodyさん2009/01/10(土) 18:46:39ID:???
>>263
$form->input('name',array('type'=>'submit'));
1.2finalでオレもTEXTAREAになった。そんなもんだろう。

聞いちゃいないだろうけど普通のsubmitの書き方
$form->end('了解');

$form->submit('了解');
0265nobodyさん2009/01/10(土) 19:00:31ID:???
end('了解');の「submit」ボタンの頭に半角20個くらいの空白を入れるおせっかいをして
くれるんだけど、この頭の空白をなしにするのは/webroot/css/cake.generic.cssをどう
変更すればいいの?

input[type=submit] {
  display: inline;
  font-size: 110%;
  padding: 2px 5px;
  width: auto;
  vertical-align: bottom;
}
0266nobodyさん2009/01/10(土) 19:02:23ID:???
>>265
それはCSSじゃなくてHelperのしわざだろ
0267nobodyさん2009/01/10(土) 19:11:23ID:???
>>266
thanks. ヘルパーのしわざですか。それなら仕方ない。ほっときます。
0268nobodyさん2009/01/10(土) 19:13:59ID:???
>>261

それじゃ意味ないでしょう…

この辺りがFW使うメリットなんで、早くなんとかしてほしいね
0269nobodyさん2009/01/10(土) 19:35:42ID:???
>>268
コンポーネントの機能としてコントローラを見るかどうかって選べなかったっけ?
0270nobodyさん2009/01/10(土) 19:36:40ID:???
>>269

allowedControllerプロパティ?
それなら既にやってる orz

なんかうまい方法ないかな
ちょっとソース見てみたけどさっぱりだ orz
0271nobodyさん2009/01/10(土) 19:38:00ID:???
$this->Model1->find('all',array('contain'=>array(
'Model2'=>array('conditions'=>array( ... )),
));

みたいにやると、Model2のコンディションに合致したModel1だけが返るんじゃなく
合致してないものも返ってくるよね?
合致した物だけにするにはどうすればいい?
0272nobodyさん2009/01/10(土) 20:26:03ID:tnQWYP/T
例えば

dvd
cd
mp3

っていうモデルがあったとしたら、コントローラーはそれぞれ作る?

それとも

audio

みたいに一つにまとめて、そっから各モデルを呼びだす?

処理的に似たようなのが多いんだけど、
それでも分けるのが普通?
0273nobodyさん2009/01/10(土) 20:27:45ID:???
コントローラはモデルと1:1にする必要性なんてないでしょ
当然audioでまとめる
0274nobodyさん2009/01/10(土) 20:30:14ID:???
Cakeって世界で一番使われてるFWとかいうけど微妙にライブラリが充実してないことない?
他のFWもこんなもんなのかな
0275nobodyさん2009/01/10(土) 20:37:41ID:???
>>273

だよね?
ちょっと不安になったんで聞いてみた

ありがと!
■ このスレッドは過去ログ倉庫に格納されています