トップページ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/
01731712007/12/26(水) 11:40:51ID:???
>>172
すごいありがとう。ほんととっかかりがわからなくて。感謝!やってみます。
勉強会行きたかったな〜。
0174nobodyさん2007/12/26(水) 12:26:56ID:???
ちょっと検索すれば出て来ることだよ・・
0175nobodyさん2007/12/28(金) 00:04:04ID:???
しかとだてめーわ 重荷を負って一生かけて学びやがれ!
0176nobodyさん2007/12/28(金) 01:37:12ID:???
しかと引き受けた
0177nobodyさん2007/12/28(金) 02:04:26ID:???
この流れの意味が分からないw
0178nobodyさん2007/12/28(金) 09:49:34ID:???
このスレの流れに意味なんて必要ない!
0179nobodyさん2007/12/28(金) 09:55:56ID:???
なかよくやろうよ。
0180nobodyさん2007/12/29(土) 15:34:55ID:???
学園なかよし計画
0181nobodyさん2007/12/29(土) 15:45:50ID:???
家族計画
0182nobodyさん2008/01/01(火) 02:04:43ID:???
先週ぐらいからCakeを使い始めてみた。
いったんわかってくるとサクサク作っていけるのが嬉しいね。

ただ、マニュアルは機能を網羅してるわけじゃないんだな。
マニュアルに載っていることが全て、だと思って進めてくと意外としょうもない所でつまずいたりしちゃうね。
まあこれはCakeに限った話じゃないけど。
0183nobodyさん2008/01/03(木) 22:38:40ID:???
>>182
年明け早々に書く事か?w
いや、むしろ好意的な意味で。熱心だな。w
0184nobodyさん2008/01/04(金) 01:10:03ID:???
Cakeはベーカリーとかソースコードとか覗くと楽しい。
マニュアルだけだと(特に1.1系)他のフレームワークに見劣りする。
1.2系はちょっと自分用に改造するとすごい使いやすい。
0185nobodyさん2008/01/04(金) 13:24:08ID:???
なんで改造しちゃうの。
0186nobodyさん2008/01/04(金) 14:28:39ID:???
確かに。何の為にオープンソースのフレームワーク使ってるんだか分からないw
0187nobodyさん2008/01/04(金) 14:59:45ID:???
オープンソースだから改造できるんじゃんw
0188nobodyさん2008/01/04(金) 21:12:38ID:yI22KOOz
pre_betaからbataで変わって気づいたこと(てか、直したとこ)

・admin routesのとき、paginatorの飛び先がおかしいのがなおった
・posts/index/foo:bar が $this->params['pass'] でなくて $this->params['named'] に入る
・posts/view/20 は $this->params['pass'] に入る
・loadModel, loadComponent は非推奨 App:import('Model', 'name') にしろといってくる。
・generateList() も find('list', array()) にしろといってくる。
・webservice 使用時 $this->layoutPath をわざわざ指定しないといけなくなった。
・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)

いまんとこ、こんな感じでした。
0189nobodyさん2008/01/05(土) 10:59:20ID:???
情報乙。
bakeで生成されるコードも伴って変更されてるといいな
0190nobodyさん2008/01/05(土) 15:28:31ID:???
>>188
>・何気にapp_controller.php, app_model.php の場所がかわってる(そのままでも動くが、気持ち悪いので変えた)

* Create the same file in app/app_controller.php
* Create the same file in app/app_model.php

って書いてあるからpre-betaと変わっていないと思うんだけど。
0191nobodyさん2008/01/05(土) 17:30:26ID:???
betaでバリデーションの挙動が変わったのか、自作関数でバリデーションする場合
チェックされる(ポストされた)データが配列でわたるようになってる。
使いにくくなった。なんでだ?
0192nobodyさん2008/01/05(土) 18:40:44ID:???
MySQL4.0.25 cake1.2beta に乗り換えたら
$this->Post->del($id);
で、SQLエラーでちまったよ。
エリアスがユニークじゃない!とかいわれたよ・・・
どうしたもんかね?
0193nobodyさん2008/01/07(月) 15:01:55ID:???
じゃあ、俺も。betaで変わったとこ。

モデルの _tableInfo変数 が _scema変数 に変わった
_scemaの構造も_tableInfoとちょっと違う


まあ、この変数は積極的に使うものじゃないけどね。
0194nobodyさん2008/01/08(火) 12:06:39ID:???
cakeって、model名 = コントローラー名 = テーブル名
ってなっているけれど

コントローラー名がテーブル名だと、アクセスするときに変じゃない?

普通画面名とか、機能名とかつけるものだと思っていたんだけれど、
どうなんでしょう

bakeでviewを作成するときに、選択可能なリストにModelがでてくるけれど、
コントローラーだしてほしい

そういうものなのかなぁ
0195nobodyさん2008/01/08(火) 15:41:16ID:???
>>194
別に他の名前も付けられるんだからいいじゃん。
特にコントローラー名なんて変え放題じゃない?
0196nobodyさん2008/01/08(火) 16:24:57ID:???
bakeが、コマンドラインから叩くのめんどくさいし、環境を選ぶ。
規約に従ったphpファイルを作ってアップロード、実行するとbakeされるように出来ないのかな。
0197nobodyさん2008/01/09(水) 17:55:03ID:???
>>195
え、url上の名前って簡単に変えられるの?
モデルの
var $name = 'Post';
ってところの名前変えれば出来るって事?
0198nobodyさん2008/01/09(水) 18:08:04ID:???
>>197
それはむしろモデルに対するテーブル名じゃまいか?
urlウンヌンは、好きな名前でアクション作れば良いかと。
0199nobodyさん2008/01/09(水) 18:57:52ID:???
コントローラとモデルの紐付けは実はあんまり強くないよ。
コントローラで$usesを定義してやれば好きなモデルをいくつでも使うことができるから
極端な話、$usesさえあればコントローラの名前は任意で大丈夫。
つーか、コントローラ名=URL上の表記だから、コントローラ名は
アクセス側から分かりやすい名前にする方が重要だと思う。
正規化でテーブルが沢山増えた場合はなおさら。

で、$usesを定義しないとコントローラ名を単数形にしたモデルを自動で使う。
その時、PHP4はクラス名からモデル名を引っ張ってこれないから$nameを見てモデル名を決める。
$nameはその時に使う。逆に言うとPHP5以降は$nameは不要。

…だったと思うけど、情報古いかもしんないから注意してね。
0200nobodyさん2008/01/09(水) 23:29:04ID:???
1.2betaになって、もしかして$form->inputで出力されるタグがフィールドの種類に応じて変わらなくなったのか?
前は、date型のフィールドなら日付選択のセレクトタグが出たんだが。
0201nobodyさん2008/01/10(木) 21:31:14ID:???
俺、最近$usesすらも使わないで、
モデル使いたい場所で、

App::Import('Model', $model_name); //pre-betaではloadModel
$model = new $model_name();
$model->findAll();

とかやってるw
やばいかなぁ。
0202nobodyさん2008/01/11(金) 00:37:03ID:edIhawVf
>>201

ちょいやばですね
0203nobodyさん2008/01/11(金) 11:30:25ID:???
>>202
どういうふうにやばい?
0204nobodyさん2008/01/11(金) 20:24:44ID:???
フレームワークせっかく使ってるのに規約にそってないから、複数で開発したら異端児
0205nobodyさん2008/01/12(土) 01:07:43ID:???
でもさ。コントローラではusesでいいかもしれないが、
コントローラ以外で、モデルを使う方法他に何がある?
0206nobodyさん2008/01/12(土) 07:06:39ID:???
逆にどういう状況でコントローラ以外でモデルを使うんだ モデル内で別のモデルを使うとか?
0207nobodyさん2008/01/12(土) 09:24:00ID:???
一つのモデルに保存したら、SQLのトリガーのように別のモデルに保存することもありますし、
それをBehaviorにしてBehaviorで使うこともありますし、
テーブルに保存されたデータをもとに値を返すComponentも考えられますし、
コントローラ以外のどこででも、モデルを使うことって考えられますよ。
0208nobodyさん2008/01/12(土) 21:32:01ID:4ugQnDqA
それでしたら、 MVC が成り立たなくなるのでは?
少なくとも

「早く開発できる」

も大切ですけど、

「規約に沿った開発」

を心がけた方が最終的には良いかと思いますが、いかがでしょうか。
0209nobodyさん2008/01/13(日) 00:11:18ID:???
>>208
この程度でMVCが成り立たなくなるわけが無い。

規約を守ることが目的になっていませんか?

0210nobodyさん2008/01/13(日) 01:41:55ID:???
規約守った方がいいにきまってる。
こういうやつとは仕事したくないな。
汚いソースを読まされそうだ。
0211nobodyさん2008/01/13(日) 10:00:42ID:???
パフォーマンス的にはどうなんだろう?
1つのアクションでしか使わないモデルを、
コントローラ全体から呼び出すのはどうなのかな?

あまり、変わらなければ、規約に沿ったほうがいいね。
0212nobodyさん2008/01/13(日) 14:32:44ID:???
>>207のような状況は普通にある

さすがにテンプレートやヘルパーでモデル呼び出しはしないけど
ヘルパーのようにモデル同士が連携したくなる場合なんてざら。
開発規則で決めればコンポーネントからモデル呼び出しも十分
視野に入るだろ。

そもそもコントローラの責任範囲はあまりに広すぎる。
save()時に関連キーの値を意識しなきゃいけないとかアホだろ
モデルに任せとけよそんなもん。
0213nobodyさん2008/01/13(日) 19:43:12ID:???
> さすがにテンプレートやヘルパーでモデル呼び出しはしないけど

本当にそう?

たとえば、xoopsなんかにある、”ブロック”

メインのページの左右に表示され、ページの中のコンテンツとは
直接関係無いような情報(もちろんデータはデータベースにある)を
表示するとき、それをどのように作る?
0214nobodyさん2008/01/13(日) 19:47:23ID:???
CakePHPにはお世話になっているから
悪いことは言いたくないが、一つだけ言わせてくれ。

function foo($v1=null, $v2=null, $v3=null) {
 if($v1がなんたらだったら) {
  $v1 = $v2;
  $v2 = $v3;
 }
}

こういうコードはやめてくれ。引数とコードがわけがわからなくなる。
02152122008/01/13(日) 19:55:54ID:???
>>213
requestAction
0216nobodyさん2008/01/13(日) 20:39:16ID:???
規約に沿わずパフォーマンス云々を求めるならフレームワークなんか使うなよ
0217nobodyさん2008/01/13(日) 21:12:12ID:???
CakePHPでトランザクションの使い方を教えてください。
0218nobodyさん2008/01/13(日) 21:52:00ID:???
クエリ実行前に必要な処理をすれば大丈夫です。
Cakeだからといって特別なことはございません。
0219nobodyさん2008/01/13(日) 22:26:54ID:???
意味がわかりません。
トランザクションに関してはデータベースごとに構文が違うわけで、
データベースの違いを吸収するCakePHPには
当然トランザクションの機能があってしかるべきでは?
02202122008/01/14(月) 03:54:21ID:???
cakeには確か標準で付いてなかったと思う。んだからbehaviorつかえ
http://bakery.cakephp.org/articles/view/transaction-behavior
0221nobodyさん2008/01/14(月) 03:54:41ID:???
やべ 名前そのままじゃん
0222nobodyさん2008/01/14(月) 04:48:55ID:???
>>220
1.2でついたんじゃなったですか?
その使い方はどうするのでしょうか?
0223nobodyさん2008/01/14(月) 11:48:41ID:???
decorate,Masterbakeって1.2だとだめなの?
しょぼーん
0224nobodyさん2008/01/14(月) 13:10:50ID:???
なんの機能が足りないの?
1.2はbakeでそこそこいけるぞ
0225nobodyさん2008/01/14(月) 14:59:49ID:p06mFmgf
>>222
cake1.2用って書いてあってサンプルコードまで載ってるのに、これ以上どうしろと。
0226nobodyさん2008/01/14(月) 22:01:03ID:qwz7LRgA
DB をポスグレにしても後悔しませんか?
0227nobodyさん2008/01/15(火) 02:37:42ID:???
他のデータベースより好きならお好きに
0228nobodyさん2008/01/15(火) 11:58:53ID:???
xoopsとかwordpress等CMSのインストーラみたいに、ブラウザから設定するとbakeしてくれるようになってると激しく便利なんだけどなー。

こういうの誰か作って配布してたりする?
0229nobodyさん2008/01/15(火) 18:18:48ID:???
便利か?
0230nobodyさん2008/01/15(火) 21:44:26ID:???
linuxやWebアプリ作成などになれてない利用者目線だね、開発者じゃなく
0231nobodyさん2008/01/15(火) 21:49:55ID:???
いや、bakeはそれがたとえブラウザから実行できたとしても、
利用者レベルじゃ使用できんだろ。
コードはいた後、コードいじらないと使い物にならないんだから。
0232nobodyさん2008/01/16(水) 00:10:13ID:???
いや利用できないとか言い出したら、bake自体がいらんかと。

例えば、「モデルが無いですよ」とかエラーを吐いてくれるとこで、作るべきファイル名やコードをブラウザが表示してくれてるけど、それを手動で作る代わりに「(デフォのでいいから)作成」ってボタンがあったら嬉しいじゃない?
0233nobodyさん2008/01/16(水) 00:42:46ID:???
ずいぶん初心者が増えてきたね>Cake
0234nobodyさん2008/01/16(水) 00:46:04ID:???
そもそも楽するための物だから良いかと。
0235nobodyさん2008/01/16(水) 03:05:48ID:???
初心者が安易にフレームワークに頼るのは危ういと思われるよ。
0236nobodyさん2008/01/16(水) 08:37:03ID:???
初心者が読みにくくて危険なコードを大量生産しないために生まれたんだろ?
0237nobodyさん2008/01/16(水) 08:57:12ID:???
どこまで面倒見てくれるか、手間を減らしてくれるか、の要求レベルは人によって違う。なら大は小を兼ねるかと。bake自体、なんか面倒だからと、使いたくない人は使わず、手動でセコセコ作ってる。違う解決法があるなら使いたいが。


まあそれによってフレームワーク自体が肥大するのは困るけど、これはそこまでたいした話じゃない。
0238nobodyさん2008/01/16(水) 11:01:01ID:???
>>232
自分で作れw

エラーメッセージのビューをちょっと置き換えるだけで作れるだろ?
0239nobodyさん2008/01/16(水) 11:33:15ID:???
うん。まあ置き換えただけじゃダメだけどね。
0240nobodyさん2008/01/16(水) 11:49:22ID:???
俺俺関数をグローバルに書きたい時の作法って決まってる?
app/config/bootstrap.php に今はベターっと書いてるんだけど
これだとアプリごとに書く必要があって かといってcake/bootstrap.phpに書いちゃうと
バージョン上げる時に忘れて上書きしちゃいそう
0241nobodyさん2008/01/16(水) 11:52:39ID:???
>>240
コンポーネントじゃなくて?
0242nobodyさん2008/01/16(水) 12:14:38ID:???
app_controllerでいいんじゃね?
コンポーネントはいちいち利用宣言するのがめんどくさくて
ほとんどapp_controllerに書いちゃってるけど、まずいかな?
0243nobodyさん2008/01/16(水) 14:48:27ID:???
オレオレ関数ファイルをvendorsにつくって
bootstrap.php で読み込ませてる
0244nobodyさん2008/01/16(水) 15:53:09ID:???
コントローラとかでしか使わないようなのは、AppControllerだけど、
汎用的な関数は、app/config/bootstrap.php に書いてる。
app以下にあるし、空ファイルだし、そのために作られたファイルだろ?って思ってる。

汎用的なクラスは、vendersにおいて使ってるけど。
0245nobodyさん2008/01/16(水) 15:56:29ID:???
通常コントローラはAppControllerを継承するけど、
間にもう一層入れたい場合どうやる?

Controller

AppController

MyController

FooController

このとき、

class FooController extends MyController

ってすると、MyControllerがいませんっていわれちゃう。
0246nobodyさん2008/01/16(水) 21:13:11ID:???
>>245
MyController は app_controller.php に書いてる。
0247nobodyさん2008/01/17(木) 10:34:58ID:???
コントローラでもビューでもそれ以外でも使うクラスは
何で作る?コンポーネント?

このクラス、モデルデータを必要とするんだよね。
何で作ればいいんだろう?
0248nobodyさん2008/01/17(木) 11:22:09ID:???
>>241-244
vendors/oreore.inc.php に書いて
app/config/bootstrap.php から vendor('oreore.inc');
で読み込むことにしますた さんくす
0249nobodyさん2008/01/17(木) 11:54:11ID:???
質問です。

app/config/core.php
define('DEBUG', 2);

この状態で、特定のページだけデバッグ情報を出さないようにって出来ないものかな?

1)XMLを出力するプログラム
2)それを受け取って処理するプログラム

1の方はもう出来上がってて、デバッグが出力されると構文が崩れて困る。
かといって、define('DEBUG',0);にすると、2の方の開発が困る。XMLは動的なものを使いたい。

0250nobodyさん2008/01/17(木) 13:27:06ID:???
>>245
App::import('Contoller', 'MyController'); //昔はloadController
class FooController extends MyController

ってすればいいんじゃないの?
0251nobodyさん2008/01/17(木) 16:34:27ID:2woYNb+h
>>249

ヒント、
function beforeRender()
{
if ($this->layout=='ajax') Configure::write('debug', 0);
}

これでわかったら、スーパーひとしくんプレゼント!
02522492008/01/17(木) 18:41:28ID:???
>>251
うへー、感動シマスタ
ありがとう!
0253nobodyさん2008/01/17(木) 18:42:25ID:???
>>247
詳しく聞いて無いから間違いかもしれないけど、
たぶんそれは設計ミス。
モデルとコントローラーとビューは疎結合にあるべき。

答えとしてはコンポーネントにモデルインスタンスを渡せば良いと思う。
ビューの部分のロジックは、ヘルパーに委譲。

本当にどうしてもどこでも使いたいなら、bootstrapに書くか、vendorで外部ライブラリとして読み込ませる。
0254nobodyさん2008/01/18(金) 11:33:07ID:???
>>253
単純にiniファイル的な役割をさせたいだけなんだけど・・・
0255nobodyさん2008/01/18(金) 13:06:23ID:???
ビューでformやhtmlのヘルパー使ってるとなんかどこもかしこも
DBのテーブル名やカラム名で溢れてくるんだけど何か間違ってる?
JAVAもRORも途中でめげたんで他との比較は出来ないけどMVCってこういうもんなん
0256nobodyさん2008/01/18(金) 13:10:12ID:???
MVC(改)でやれば
0257nobodyさん2008/01/18(金) 13:15:52ID:???
>>255
たとえば?
0258nobodyさん2008/01/18(金) 16:28:03ID:???
1.2で増えたものかどうかは知らないけど、
調べるついでにマイナーだと思われるものを書いていくよ。
ざっくり調べただけだから間違いがあるだろうが許せ。
というか、誰か補足してくよw

・Configure::store('AAA', 'a', array('data'=>'123'));で値保存。
 /app/temp/cache/persistent/a.php ができる。
 Configure::load('a'); でa.phpファイル読み込み
 pr(Configure::read('AAA')); で保存した値表示。
・flay ・・・Text-to-HTML Textile見たいな物?
 wiki文法みたいに簡易な文法で書いたらHTMLに変換してくれる?
・MagicDb ・・・ 拡張子に頼らないファイル解析?
 MagicFileResourceを継承したクラスを作ることで対応フォーマットが増やせそうだが、
 初期で対応しているフォーマットはなし?http://www.magicdb.orgは関係ありか?
・MediaView ・・・ なんか拡張子に対応したMIMEタイプリストがあるが?
 header("HTTP/1.1 206 Partial Content");とかあるし、ファイルダウンロードさせたいときに使う?
・String ・・・ えー? UTF8対応? 今度からこれ使えと?
・ThemeView ・・・ CSS切り替えみたいなもんか?
・XML ・・・ XMLあつかえるのね。
・Debugger ・・・ デバッガ。便利だよ。デバッガ。
・Socketと名のつくもの ・・・ まあソケットをそのまま触れるのでしょう?
・Controller::isAuthorized() ・・・ 認証系で使うべきものなんだろう。
・I18n L10n ・・・まああれだ。俺みたいに日本専用でビューに直接日本語書いている奴には不要ってこった。
・FormHelper::secure トークンだしてくれる
・PagesController 次に進む なんてページを作るのにいいんだろうなとは思う。名前からして。
・Model::deconstruct ・・・ フォームのフィールド、日付を年ドロップダウン、月ドロップダウン、日ドロップダウン、に
 分かれて入力されているのをひとつにしてくれるっぽい。
・TreeBehavior ・・・ テーブルをツリー構造として見れる? moveupとかmovedownとか
・TextHelper・・・autoLinkってのがある。リンクっぽいテキストをリンクにしてくれる。
 TextHelper::toList ・・・ 日本人には不要w
・ClassRegistry ・・・ ようはオブジェクトがどこからでも見れる? グローバル変数的なので使い方に注意。
0259nobodyさん2008/01/18(金) 16:30:18ID:???
FormHelperって$form->input('field_name')ってするだけで
フィールドの型に応じたフォームが自動で出てくるけど、
これって、ヘルパーがモデルを見てるってことだよね?

それって設計的にありなん?
0260nobodyさん2008/01/18(金) 17:24:57ID:???
この便利関数きっとどこかにあるんだろうなってapiのそれっぽいの見ていって
結局無かった(しかもおそらく見つけられなかっただけでどっかにある)時の徒労感ってなかなかいいよね
英語弱いからなあ
0261nobodyさん2008/01/18(金) 17:27:59ID:???
なかなかいいのかよw

リファレンス本欲しいな。
0262nobodyさん2008/01/18(金) 19:38:04ID:/74lUS2r
INSERT ... ON DUPLICATE KEY UPDATEしたいんですが、
どういう風にやるのがスマートでしょうか?
0263nobodyさん2008/01/18(金) 20:11:24ID:???
あああなるほどbakeでビューに出てきて文字列素通しにしてる__ってのはなんだろうと思ったら
多言語対応のあれなのかようやくわかったありがとう
0264nobodyさん2008/01/18(金) 21:09:17ID:???
今日つかい始めたのだけど、標準でO/Rマッパー無いのこれって?
0265nobodyさん2008/01/18(金) 21:10:28ID:???
普通についてるだろ。
どこみてんだ。
0266nobodyさん2008/01/18(金) 21:40:04ID:???
>>264
レス先走りすぎだ。

1.INSERT ... ON DUPLICATE KEY UPDATEしたいんですが、

2.直接SQL文発行しる!

3.標準でO/Rマッパー無いの?

煽るのならこの順番だろうがw 2番を飛ばすな
0267nobodyさん2008/01/18(金) 21:43:48ID:???
>>259
前どっかで同じことをいってたやつがいたな。
CakePHPか忘れたけど。
設計とか詳しくないからただの一つの意見だけど、
便利だからまぁいいんじゃないかなと思う。
疎結合っていう観点からはよろしくないのかもね。
Railsも同じ機能ついてたきがす
02682622008/01/18(金) 22:44:42ID:???
やっぱexecuteで発行するしかないんでしょうか。。
0269nobodyさん2008/01/19(土) 09:25:13ID:???
Cakeを「ケイク」と読んでるのは俺だけ・・・だよな・・・?
「ケーキPHP」より「ケイクPHP」のほうが言いやすい
0270nobodyさん2008/01/19(土) 10:53:43ID:???
英語の発音は、むしろ警句だろ?
0271nobodyさん2008/01/19(土) 11:44:58ID:???
おれもケイクって呼んでる
0272nobodyさん2008/01/19(土) 11:57:21ID:???
Helperに対して、コントローラから情報をわたすことって出来んの?
それともこれってなんか変な設計?
■ このスレッドは過去ログ倉庫に格納されています